【问题标题】:Using regex in Python if statement [duplicate]在 Python if 语句中使用正则表达式 [重复]
【发布时间】:2018-06-21 07:16:56
【问题描述】:

我试图弄清楚如何将正则表达式合并到 python if 语句中。我有一个 pandas 数据框,我在其中迭代行并希望在每次行具有特定的文本组合时执行一个操作。正则表达式应匹配任何以大写字母开头后跟 6 个数字的 7 个字符的字符串(即 R142389)

        for index, row in df1.iterrows():
             if row[4] == REGEX HERE:
                  Perform Action

我这样做是否正确?任何帮助将不胜感激!

【问题讨论】:

    标签: python regex


    【解决方案1】:

    是的,您可以这样做,只需使用match,它只会匹配要与之比较的字符串的开头。您必须使用 search 来搜索整个字符串。

    关于正则表达式的一点解释:

    ^ 断言字符串开头的位置

    [A-Z] A-Z 介于 A(索引 65)和 Z(索引 90)之间的单个字符(区分大小写)

    \d{6} 匹配一个数字(等于[0-9]{6} 量词——精确匹配 6 次

    $ 断言位置在字符串的末尾,或者在字符串末尾的行终止符之前

    import re
    
    regex = re.compile('^[A-Z]\d{6}$')
    
    possibles = ['R142389', 'hello', 'J123456']
    
    for line in possibles:
        if regex.match(line):
            print(line)
    

    输出:

    R142389
    J123456
    

    【讨论】:

    • 小心str = ['R142389', 'hello', 'J123456']。您覆盖的内置名称可能会导致 strange errors 等。最好改用strs 之类的名称。无论如何,很好的答案。 +1
    • 如果你推荐使用match,你应该提到它只会匹配字符串开头的模式。 search 将在整个字符串中查找匹配项。
    • @ChristianDean 哎呀,已修复
    • @skrrgwasme 也许,但请注意 OP 明确“正则表达式应匹配 以大写开头的任何 7 个字符串字母后跟 6 个数字".
    • 成功了!谢谢!
    【解决方案2】:

    我会使用re 模块

    import re
    
    re.search(pattern, string, flags=0)
    

    其中pattern是要匹配的正则表达式,string是要搜索的字符串,flags是可选修饰符。当没有匹配时,这个函数返回None

    这是re 文档: https://docs.python.org/2/library/re.html

    下面是一个实现示例:https://www.tutorialspoint.com/python/python_reg_expressions.htm

    【讨论】:

      猜你喜欢
      • 2015-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-21
      • 2022-10-24
      • 2019-11-28
      • 2014-08-25
      • 1970-01-01
      相关资源
      最近更新 更多