Python正则表达式模式/函数未从我的数据字符串检索数据

Python正则表达式模式/函数未从我的数据字符串检索数据,python,regex,python-2.7,Python,Regex,Python 2.7,我正试图使用各种正则表达式,在不断变化的数据字符串上提取字符串中的某些部分 例如,下面的两个正则表达式应该只起作用:example$00.00和bla$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) 有人知道我

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

例如,下面的两个正则表达式应该只起作用:
example$00.00
bla$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)
有人知道我做错了什么吗

提前谢谢 -Hyflex

match()
约束匹配从字符串开头开始(请参阅文档)。您需要的是
search()
。您也不希望将
^
放在regexp的开头:这也会迫使匹配从字符串的开头开始。您的模式无法匹配从
数据开始的字符串。

请尝试:
\b((示例| bla)\s\$(\d{2})\.\3)\b

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

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

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)
我已经从你的正则表达式中删除了“^”


祝你好运

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

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

re.findall(r'(.*?)\s(\$.*?)\s', data)
会回来的

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


在您的示例中,您正在尝试匹配字符串开头的“example”,该字符串由于未找到而返回None。查看更多信息

他们在拉什么?当它明显存在于我的代码中时,它返回
None
。非常感谢你解释正则表达式,这对我真的很有帮助(我与正则表达式斗争)。当然,你可以将它更改为
\b((示例| bla)\s\$\d+.\d{2})\b
,因为美元金额可能超过99.99美元,效果非常好,非常感谢你。绿色勾号将在5分钟内颁发:)不完全是。谢谢,更新了。我通常只使用FUNDALL,所以我没有考虑。