【问题标题】:Python Regex for string matching用于字符串匹配的 Python 正则表达式
【发布时间】:2015-05-07 17:10:29
【问题描述】:

我正在尝试与regex 匹配两条规则。我已经尝试过对各种情况进行测试,但给了我不想要的结果。

规则如下:

  1. 查找所有数字字符串(包括整数、小数和负值)
  2. 查找所有没有数值的字符串。这是指特殊字符,例如 !@#$%^&*()

所以在我尝试匹配这些规则时,我得到了这个:

def rule(word): 
  if re.match("\W", word):
    return True
  elif re.match("[-.\d]", word):
    return True
  else:
    return False

Input: output测试如下

word = '972.2' : True

word = '-88.2' : True

word = '8fdsf' : True

word = '86fdsf' : True我希望这是假的

word = '&^(' : True

还有一些测试,但我只是想表明我想返回 False。似乎它只匹配第一个字符,所以我尝试更改正则表达式 epressions,但这让事情变得更糟。

【问题讨论】:

  • 对于识别号码,使用try/exceptnumber=float(string)会更简单

标签: python regex


【解决方案1】:

正如documentation 所说,re.match 将返回一个MatchObject,只要字符串的开头与正则表达式匹配,它的计算结果总是True

因此,您需要在正则表达式中使用锚点来确保只有整个字符串匹配计数,例如[-.\d]$(注意美元符号)。

编辑:加上 Max 所说的 - 使用 +,这样您的正则表达式就不会只匹配一个字母。

【讨论】:

    【解决方案2】:

    您的正则表达式(两者)只查看字符串的第一个字符。更改它们以在末尾添加+$,以确保您的字符串由目标字符组成。

    【讨论】:

      【解决方案3】:

      据我了解,您需要排除除 1 和 2 之外的所有内容。

      试试这个:

      import re
      
      def rule(word):
        return True if re.search("[^\W\d\-\.]+", word) is None else False
      

      提供样本的结果:

      • 972.2:是的
      • -88.2:是的
      • 8fdsf:错误
      • 86fdsf:错误
      • &^(: 真

      【讨论】:

        猜你喜欢
        • 2020-11-29
        • 2011-11-28
        • 1970-01-01
        • 2019-10-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-16
        • 1970-01-01
        相关资源
        最近更新 更多