python中的正则表达匹配以提取所有主题标签及其相邻的标点



我想提取与其他主题标签/标点相邻的所有主题标签,以便我可以从中获得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!']

相关内容

  • 没有找到相关文章

最新更新