正则表达式{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。能力所限只能写到这样,有更好的赶紧上

clipboard.png
把第一个逗号去了就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

回到顶部