正则表达式总是给出None

时间:2014-05-27 20:43:28

标签: python regex python-2.7

这是我的代码

>>> ll = 'window.DETAILS_PAGE_MAP_GLOBALS = {GOOGLE_MAPS_LONGITUDE: 55.2378015294,GOOGLE_MAPS_LATITUDE: 25.0463764816}'
>>> print(re.match('GOOGLE_MAPS_LATITUDE:\s*(\d+\.\d+)', ll))
None

我总是得到None 虽然我确信100%正则表达式是正确的。

你可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

使用re.search() re.match();后者只匹配字符串开头的

  

如果 string 开头的零个或多个字符与正则表达式模式匹配,则返回相应的MatchObject实例。

演示:

>>> import re
>>> ll = 'window.DETAILS_PAGE_MAP_GLOBALS = {GOOGLE_MAPS_LONGITUDE: 55.2378015294,GOOGLE_MAPS_LATITUDE: 25.0463764816}'
>>> re.match('GOOGLE_MAPS_LATITUDE:\s*(\d+\.\d+)', ll)
>>> re.search('GOOGLE_MAPS_LATITUDE:\s*(\d+\.\d+)', ll)
<_sre.SRE_Match object at 0x105525cd8>
>>> re.search('GOOGLE_MAPS_LATITUDE:\s*(\d+\.\d+)', ll).group(1)
'25.0463764816'

答案 1 :(得分:1)

您需要使用re.search()代替re.match()。第一个是查看字符串中任何位置的模式,另一个查看模式是否可以应用于字符串完全

From the documentation

  

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

     

扫描字符串,查找正则表达式模式生成匹配项的位置,并返回相应的匹配对象。如果字符串中的位置与模式匹配,则返回None ;请注意,这与在字符串中的某个点找到零长度匹配不同。

示例:

>>> print(re.search('GOOGLE_MAPS_LATITUDE:\s*(\d+\.\d+)', ll))
<_sre.SRE_Match object at 0xffecf260>
>>> print(re.search('GOOGLE_MAPS_LATITUDE:\s*(\d+\.\d+)', ll).groups())
('25.0463764816',)
>>> print(re.search('GOOGLE_MAPS_LATITUDE:\s*(\d+\.\d+)', ll).group(1))
25.0463764816