It'*_* me 0 python regex django
我将从查询中获取输出,如:
[ (14577692L, 'POINT(-122.106035882 37.397386475)'), (14577692L, 'POINT(-122.106035882 37.397386475)'), (14577692L, 'POINT(-122.106035882 37.397386475)') ]
Run Code Online (Sandbox Code Playgroud)
我想单独获取POINT值以使用正则表达式获取lat和long值.
_RE = re.compile('\(\([\d\-\., ]*\)\)')
for i in cursor.fetchall():
for p in _RE.findall(i[1]):
// I want latitude and longitude value from POINT(-122.106035882 37.397386475)
Run Code Online (Sandbox Code Playgroud)
我的正则表达是错误的.有人可以帮我纠正这个:
_RE = re.compile('\(\([\d\-\., ]*\)\)'))
Run Code Online (Sandbox Code Playgroud)
这不需要正则表达式.因为POINT()静态的格式,您可以简单地切出包含坐标的字符串部分并将其拆分在空格上:
resultset = [
(14577692L, 'POINT(-122.106035882 37.397386475)'),
(14577692L, 'POINT(-122.106035882 37.397386475)'),
(14577692L, 'POINT(-122.106035882 37.397386475)')
]
for row in resultset:
coordinatestring = row[1][6:-1]
lat, lon = (float(x) for x in coordinatestring.split(' '))
do_something_with(lat, lon)
Run Code Online (Sandbox Code Playgroud)
切片表示法[6:-1]省略了前6个字符和原始字符串的最后一个字符,分别是POINT(和).这留下了两个用空格分隔的数字,这很容易处理,如上所述.
如果绝对必须使用正则表达式,则应使用原始字符串以避免必须两次转义字符,并使用两个捕获组,以便区分第一个和第二个坐标:
>>> import re
>>> _RE = re.compile(r'POINT\(([-\d\.]+)\s([-\d\.]+)\)')
>>> _RE.groups
2
>>> _RE.search('POINT(-122.106035882 37.397386475)').groups()
('-122.106035882', '37.397386475')
Run Code Online (Sandbox Code Playgroud)
尽管如此,即使是那个正则表达式也是过度的.因为你知道POINT()静态的格式,你可以自己查找值,忽略字母和parens:
>>> _RE = re.compile(r'([-\d\.]+)\s([-\d\.]+)')
>>> _RE.search('POINT(-122.106035882 37.397386475)').groups()
('-122.106035882', '37.397386475')
Run Code Online (Sandbox Code Playgroud)
在这一点上,它变得足够简单,指出你根本不需要正则表达式的可能性(我已经展示过).质疑使用re和考虑更简单的替代品的必要性并不是一个坏主意.
| 归档时间: |
|
| 查看次数: |
112 次 |
| 最近记录: |