我想提取与其他主题标签/标点符号相邻的所有主题标签,以便我可以从中获取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)
实际输出: [&#39; #helloworld#goodday&#39;,&#39; #winter#christmastime&#39;]
预期输出 [&#39 ;! #helloworld #goodday #winter #christmastime!&#39;]
应该使用哪个正则表达式来提取字符串的预期输出?
答案 0 :(得分:1)
您可以使用
[^\w\s](?:\s*#[a-zA-Z]+)+(?:\s*[^\w\s])?
请参阅regex demo。如果始终至少有1个空格,请将\s*
替换为\s+
。
<强>详情
[^\w\s]
- 标点符号(除了单词和空白字符之外的任何1个字符)(?:\s*#[a-zA-Z]+)+
- non-capturing group个匹配的1个或多个序列:
\s*
- 0+ whitespaces #
- #
符号[a-zA-Z]+
- 1+ ASCII字母(?:\s*[^\w\s])?
- 可选序列:
\s*
- 0+ whitespaces [^\w\s]
- 标点符号(除了单词和空白字符之外的任何1个字符)import re
c = 'Hello!! This is a good day! #helloworld #goodday #winter #christmastime!'
print(re.findall(r'[^\w\s](?:\s*#[a-zA-Z]+)+(?:\s*[^\w\s])?',c))
# => ['! #helloworld #goodday #winter #christmastime!']