正则表达式{3},但是没有效果。
为了匹配坐标,同时去掉坐标前面的1,2,3编号
1,127.5212,29.5212,
2,127.2233,29.2233,
3,127.1111,29.2222
我使用了代码中的正则表达式,但是没有效果,请问为什么会这样?正则表达式该如何写呢?
>>> s = "1,127.5212,29.5212,2,127.2233,29.2233,3,127.1111,29.2222">>> print re.search("((?<=(.{2})).{16}){3}",s).group()
127.5212,29.5212,2,127.2233,29.2233,3,127.1111,2
能否解释一下为什么((?<=(.{2})).{16}){3} 没有产生效果?谢谢
回答:
>>> import re>>> regex = re.compile(r'\d{3}\.\d{4},\d{2}\.\d{4}')
>>> s = "1,127.5212,29.5212,2,127.2233,29.2233,3,127.1111,29.2222"
>>> regex.findall(s)
['127.5212,29.5212', '127.2233,29.2233', '127.1111,29.2222']
有些朋友说上面这种做法可能比较局限,当时数据格式和规律都不是很清楚,所以正则也可以为下面这种
regex = re.compile(r'\d+\.\d+,\d+\.\d+')
回答:
一楼的回答很完美但是仅限于每一组的数字位数一定的情况下,我这来个完美版的:/(^\d+,)|(,\d+,)/g
。能力所限只能写到这样,有更好的赶紧上
把第一个逗号去了就ok了
回答:
In [5]: re.findall(r'\d+,(\d+(\.\d+)?,\d+(\.\d+)?)',s)Out[5]:
[('127.5212,29.5212', '.5212', '.5212'),
('127.2233,29.2233', '.2233', '.2233'),
('127.1111,29.2222', '.1111', '.2222')]
In [6]:
感觉楼主把一个简单的问题搞复杂了,所以反而容易出错。我把你的正则推翻重写了,老实说我没看出来你的正则究竟想匹配怎样的结果。
先找一下规律。
序号(整数), lat, lng^ ^ ^
\d+ , \d+(\.\d+)?, \d+(\.\d+)?
回答:
>>> import re>>> s="1,127.5212,29.5212,2,127.2233,29.2233,3,127.1111,29.2222"
>>> re.findall(r"\d+,(.{16})",s)
['127.5212,29.5212', '127.2233,29.2233', '127.1111,29.2222']
>>> re.findall(r"\d+,([^,]+,[^,]+)",s)
['127.5212,29.5212', '127.2233,29.2233', '127.1111,29.2222']
回答:
一、取分组1,就是你想要的
\d+,([\d.]+,[\d.]+)
以上是 正则表达式{3},但是没有效果。 的全部内容, 来源链接: utcz.com/a/160376.html