我想提取与其他主题标签/标点相邻的所有主题标签,以便我可以从中获得bigrams。对于以下变量c
,我想提取['! #helloworld #goodday #winter #christmastime !']
c = 'Hello!! This is a good day! #helloworld #goodday #winter #christmastime!'
re.findall(r'(?:#[a-zA-Z]+ #[a-zA-Z]+)|(?:[!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~]+ #[a-zA-Z]+)',b)
实际输出:['#helloworld #goodday','#winter #christmastime']
预期输出:['!#helloworld #goodday #winter #christMastime!']
应使用哪种正则表达式从字符串中提取预期输出?
您可以使用
[^ws](?:s*#[a-zA-Z]+)+(?:s*[^ws])?
请参阅正则演示。如果总是至少有1个Whitespace,请用s*
替换CC_3。
详细信息
-
[^ws]
-标点符号符号(Word和Whitespace Char以外的任何1个字符) -
(?:s*#[a-zA-Z]+)+
-一个非捕获组匹配1个或多个序列:-
s*
-0 Whitespaces -
#
-#
符号 -
[a-zA-Z]+
-1 ASCII Letters
-
-
(?:s*[^ws])?
-可选序列:-
s*
-0 Whitespaces -
[^ws]
-标点符号符号(Word和Whitespace Char以外的任何1个字符)
-
python演示:
import re
c = 'Hello!! This is a good day! #helloworld #goodday #winter #christmastime!'
print(re.findall(r'[^ws](?:s*#[a-zA-Z]+)+(?:s*[^ws])?',c))
# => ['! #helloworld #goodday #winter #christmastime!']