Замените ", **" переводом строки, используя RegEx (или что-то еще) - PullRequest
2 голосов
/ 02 июня 2010

Я начал работать с RegEx, и мне было интересно, если кто-нибудь может помочь мне создать оператор для преобразования координат следующим образом:

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

до

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

(Убрать последнюю запятую и значение и превратить ее в разрыв строки.)

Я не могу понять, как использовать подстановочные знаки, чтобы сделать что-то подобное. Любая помощь будет принята с благодарностью! Спасибо.

Ответы [ 4 ]

3 голосов
/ 02 июня 2010

"Некоторые люди, когда сталкиваются с проблема, подумай «я знаю, я буду использовать регулярные выражения.' Теперь у них есть две проблемы. "- Джейми Завински

Избегайте этой проблемы и используйте строковые методы:

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

У Regex есть свои применения, но это не одно из них.

2 голосов
/ 02 июня 2010
>>> 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
1 голос
/ 02 июня 2010

Строковых методов здесь вполне достаточно, регулярные выражения излишни:

>>> 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
0 голосов
/ 02 июня 2010
>>> 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

но я предпочитаю не в этом случае использовать регулярные выражения

Мне нравится SilentGhost решение

...