Python 替换“**&引用;使用正则表达式(或其他东西)的换行符

Python 替换“**&引用;使用正则表达式(或其他东西)的换行符,python,regex,string,kml,Python,Regex,String,Kml,我刚开始使用正则表达式,我想知道是否有人能帮我编写一个语句来转换坐标,如下所示: 145.00694,-37.80421,9 145.00686,-37.80382,9 145.00595,-37.8035,16 145.00586,-37.80301,16 到 (去掉最后一个逗号和值,并将其转换为换行符。) 我不知道如何使用通配符来做那样的事情。任何帮助都将不胜感激!谢谢 >>> import re >>> s="145.00694,-37.80421,9

我刚开始使用正则表达式,我想知道是否有人能帮我编写一个语句来转换坐标,如下所示:

145.00694,-37.80421,9 145.00686,-37.80382,9 145.00595,-37.8035,16 145.00586,-37.80301,16

(去掉最后一个逗号和值,并将其转换为换行符。)

我不知道如何使用通配符来做那样的事情。任何帮助都将不胜感激!谢谢

>>> import re
>>> s="145.00694,-37.80421,9 145.00686,-37.80382,9 145.00595,-37.8035,16 145.00586,-37.80301,16"
>>> print re.sub(",\d*\w","\n",s)
145.00694,-37.80421
145.00686,-37.80382
145.00595,-37.8035
145.00586,-37.80301
“有些人在面对 问题,想想‘我知道,我会用 正则表达式。现在它们有了 两个问题。”--

避免该问题,并使用字符串方法:

s="145.00694,-37.80421,9 145.00686,-37.80382,9 145.00595,-37.8035,16 145.00586,37.80301,16"

lines = s.split(' ') # each line is separated by ' '
for line in lines:
    a,b,c=line.split(',') # three parts, separated by ','
    print a,b

正则表达式有它们的用途,但这不是其中之一。

字符串方法在这里似乎足够了,正则表达式是多余的:

>>> s='145.00694,-37.80421,9 145.00686,-37.80382,9 145.00595,-37.8035,16 145.00586,-37.80301,16'
>>> print('\n'.join(line.rpartition(',')[0] for line in s.split()))
145.00694,-37.80421
145.00686,-37.80382
145.00595,-37.8035
145.00586,-37.80301
但是我不喜欢在这种情况下使用正则表达式


我喜欢这个解决方案

我过去用它来编写正则表达式,这很有帮助。这又是一个很好的例子,说明正则表达式是多么脆弱:它只在第二个数字(-37.X)为负数时才起作用……是的,我刚刚注意到……我该如何修改它以使其匹配“,[两位数][空白]”?我正在尝试“,\d\d\w”,但这似乎不起作用。
>>> s='145.00694,-37.80421,9 145.00686,-37.80382,9 145.00595,-37.8035,16 145.00586,-37.80301,16'
>>> print('\n'.join(line.rpartition(',')[0] for line in s.split()))
145.00694,-37.80421
145.00686,-37.80382
145.00595,-37.8035
145.00586,-37.80301
>>> s = '145.00694,37.80421,9 145.00686,-37.80382,9 145.00595,-37.8035,16 145.00586,-37.80301,16
>>> patt = '(%s,%s),%s' % (('[+-]?\d+\.?\d*', )*3)
>>> m = re.findall(patt, s)   
>>> m
['145.00694,37.80421', '145.00686,-37.80382', '145.00595,-37.8035', '145.00586,-37.80301']
>>> print '\n'.join(m)
145.00694,37.80421
145.00686,-37.80382
145.00595,-37.8035
145.00586,-37.80301