簡體   English   中英

Python RegEx提取兩種模式之間的文本

[英]Python RegEx extract text between two patterns

我正在嘗試為以下項目提取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都表明代碼應該可以工作。 關於我在這里做錯什么的任何想法?

PS我花了一些時間,並研究了關於stackoverflow的所有相關解決方案,但是-沒有骰子。

使用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']

使用以下命令提取兩個值:

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

這是因為.*是貪婪的意思,它會將所有內容匹配到最后一個逗號。 更改為.*?

lat:(.*?),
       ^
   add this

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM