【问题标题】:How to input a string in regex Python?如何在正则表达式 Python 中输入字符串?
【发布时间】:2017-05-24 06:37:30
【问题描述】:

我正在尝试查找文本中所有出现的字符串。正则表达式在 python 控制台和 pythex 编辑器中运行良好,但是当我运行脚本时,它没有找到字符串。

正则表达式

regex = "r'((^|\W|\s)" + keyword + "*)'"
count_list = re.findall(regex, string, re.IGNORECASE)

keyword是输入变量,value是news

输入字符串

Latest news alerts from the world. Get news by subscribing us.

在 python 控制台和编辑器中,我得到了 两个 组。但是在运行脚本时,我得到了 zero 作为结果。

我找不到正则表达式有什么问题。

【问题讨论】:

  • 虽然您可以通过这种方式构造正则表达式,但它不适用于 Python 表达式,例如原始字符串。
  • 那么,解决办法是什么?
  • 您的代码中有错字:"r'((^|\W|\s)" => r'((^|\W|\s)'"*)'" => "*)"。甚至更好:r'((?:^|\W|\s)'r'(\b'
  • \s\W 的子集,看来您无论如何都在尝试重新发明\b

标签: python regex python-2.7


【解决方案1】:

看起来您的正则表达式行正在将 r''(原始字符串标记)传递给正则表达式解析器,我怀疑这就是导致它失败的原因。

尝试将行更改为:

regex = r'((^|\W|\s)' + keyword + '*)'

这对我有用,并产生了 2 个输出组:

[(' news', ' '), (' news', ' ')]

这是我尝试过的完整代码:

import re

def findthings(keyword, string):
    regex = r'((^|\W|\s)' + keyword + '*)'
    count_list = re.findall(regex, string, re.IGNORECASE)
    print(count_list)

def main():
    findthings("news", "Latest news alerts from the world. Get news by subscribing us.")

【讨论】:

    【解决方案2】:

    正如@Wiktor 在 cmets 中提到的那样,问题是正则表达式中包含的单引号,以下工作:

    regex = "((^|\W|\s)" + keyword + "*)"
    count_list = re.findall(regex, string, re.IGNORECASE)
    

    但是,在 python 中处理字符串时,我会使用% 运算符来编写它

    regex = "((^|\W|\s)%s*)" % keyword
    count_list = re.findall(regex, string, re.IGNORECASE)
    

    最后,如果您在任何类型的循环中使用上述正则表达式匹配,我建议将compile 字符串转换为正则表达式对象:

    regex_str = "((^|\W|\s)%s*)" % keyword
    regex = re.compile(regex)
    count_list = regex.findall(string, re.IGNORECASE)
    

    希望对你有帮助

    【讨论】:

      猜你喜欢
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-10
      • 1970-01-01
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多