【问题标题】:Python Regex pattern/function not retrieving the data from my datastringPython 正则表达式模式/函数未从我的数据字符串中检索数据
【发布时间】:2013-10-03 04:52:21
【问题描述】:

我正在尝试对不断变化的数据字符串使用各种正则表达式从字符串中提取某些部分。

例如,下面的两个正则表达式应该只拉:Example $00.00bla $00.00

data = "Maybe Example $00.00 test $00.00 bla $00.00 dasdsadasd"
pull1 = re.match(r'^(Example) (\D\w+\D\w+)', data)
pull2 = re.match(r'^(bla) (\D\w+\D\w+)', data)

有人知道我做错了什么吗?

提前致谢 - 海福克斯

【问题讨论】:

  • 那他们在拉什么?
  • 当它明显存在于我的代码中时,它会返回 None...

标签: python regex python-2.7


【解决方案1】:

如果要提取部分字符串,请使用“搜索”而不是“匹配”。 此代码工作正常:

data = "Maybe Example $00.00 test $00.00 bla $00.00 dasdsadasd"
pull1 = re.search(r'(Example) (\D\w+\D\w+)', data)
pull2 = re.search(r'(bla) (\D\w+\D\w+)', data)

print pull1.group(0)
print pull2.group(0)

我已从您的正则表达式中删除了“^”。

祝你好运!

【讨论】:

  • 效果很好,非常感谢。绿勾将在 5 分钟内获得 :)
【解决方案2】:

match() 将匹配项限制在字符串的开头(请参阅文档)。你想要search()。而且您也不希望 ^ 在您的正则表达式的开头: also 强制匹配从字符串的开头开始。从 data 字符串的开头开始,您的模式无法匹配。

【讨论】:

    【解决方案3】:

    试试:\b((Example|bla)\s\$(\d{2})\.\3)\b

    • \b - 开始词边界
    • ( - 开始第 1 场比赛
    • (Example|bla) - 第 2 场比赛
    • \s - 空格
    • \$ - 美元符号
    • (\d{2}) - 第 3 场比赛:2 位数
    • \. - 小数位
    • \3 - 重复匹配 #3
    • ) - 结束比赛#1
    • \b - 结束词边界

    查看实际操作:RegexPal

    【讨论】:

    • 非常感谢您解释该正则表达式,这实际上对我真的很有帮助(我正在为正则表达式而苦恼)
    • 当然可以改成\b((Example|bla)\s\$\d+\.\d{2})\b,因为美金金额可能会超过$99.99
    【解决方案4】:

    re.match() 匹配字符串开头的模式。如果您希望它识别字符串中任何位置的模式,请使用 search() 而不是 match()。此外,在搜索中使用“^”会将其限制在字符串的开头。

    在您的示例中,您尝试匹配字符串开头的“示例”,它返回 None ,因为它没有找到。查看this 了解更多信息!

    【讨论】:

      【解决方案5】:

      '^' 表示从换行符开始,或字符串的开头(由 1_CR 指出)。所以只要它在那里,它就永远不会匹配任何东西。

      在任何情况下,我都会使用 findall,然后解析出您以后不想要的“测试”值。

      re.findall(r'(.*?)\s(\$.*?)\s', data)
      

      将返回

      [('Maybe Example', '$00.00'), ('test', '$00.00'), ('bla', '$00.00')]
      

      【讨论】:

      猜你喜欢
      • 2010-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-04
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多