Python RegEx在两种模式之间提取文本

时间:2017-10-10 08:20:26

标签: python regex

我正在尝试为以下内容拉出lat和lng的值:

coordinates = 
[<div class="store-map">\n<div id="map" style="width: 100%; height: 400px;"></div>\n<script>\r\n                function initMap() {\r\n                    var myLatLng = {\r\n                        lat: 42.050994,\r\n                        lng: -88.077711                    };\r\n\r\n     

但是,当我应用此正则表达式时 -

found = re.search('lat:(.*),', coordinates,).group(1)  

返回“lat:”之后的所有内容 但是,所需的结果只是数字,一旦到达逗号就会停止。 这对我来说很奇怪,因为即使rubular显示代码应该有效。 关于我在这里做错了什么的想法?

P.S。我花了一些时间,并查看了stackoverflow上的所有相关解决方案,但是 - 没有骰子。

3 个答案:

答案 0 :(得分:3)

使用re.findall函数的正确方法:

import re

coordinates = '[<div class="store-map">\n<div id="map" style="width: 100%; height: 400px;"></div>\n<script>\r\n                function initMap() {\r\n                    var myLatLng = {\r\n                        lat: 42.050994,\r\n                        lng: -88.077711                    };\r\n\r\n '
result = re.findall(r'\b(?:lat|lng): -?\d+\.\d+', coordinates)

print(result)

输出:

['lat: 42.050994', 'lng: -88.077711']

答案 1 :(得分:1)

使用以下内容提取两个值:

import re

text = """[<div class="store-map">\n<div id="map" style="width: 100%; height: 400px;"></div>\n<script>\r\n                function initMap() {\r\n                    var myLatLng = {\r\n                        lat: 42.050994,\r\n                        lng: -88.077711                    };\r\n\r\n     """

lat, lng = map(float, re.findall(r'(?:lat|lng):\s+([0-9.-]*?)[, ]', text))
print lat, lng

给你两个花车:

42.050994 -88.077711

答案 2 :(得分:0)

这是因为.*是贪婪的,这意味着它会匹配 last 逗号之前的所有内容。将其更改为.*?

lat:(.*?),
       ^
   add this