Regex для удаления запятых перед числом в Python - PullRequest
0 голосов
/ 15 мая 2018

Я работаю с файлом, используя запятые в качестве разделителя.Тем не менее, в нем есть поле, адрес в котором адрес имеет форму x, y, z, что вызывает проблему, так как каждая часть адреса получает новую запись в столбце.За адресом сразу же следует member_no - однозначное число, например, 2 и т. Д. Col1 (адрес), Col2 (1-значный номер)

text = '52A, XYZ Street, ABC District, 2'

Я хочу удалить все запятые перед этим номером из поля адреса.

Вывод должен быть похож на

52A XYZ Street ABC District, 2'

Я пробовал

re.sub(r',', ' ', text)

, но он заменяет все вхождения запятых.

Ответы [ 3 ]

0 голосов
/ 15 мая 2018

Если в конце есть только одна цифра, вы можете использовать это. Может адаптироваться, если после последней запятой несколько цифр (число 3 должно быть увеличено).

text = '52A, XYZ Street, ABC District, 2'
text = text[:-3].replace(",", "") + text[-3:]
print(text)

Выход

52A XYZ Street ABC District, 2
0 голосов
/ 15 мая 2018

Нет необходимости в регулярном выражении. Вы можете просто найти последнее вхождение , и использовать его, например:

text[:text.rfind(',')].replace(',', '') + text[text.rfind(','):]
0 голосов
/ 15 мая 2018

Используйте отрицательный прогноз нулевой ширины, чтобы убедиться, что за заменяемыми подстроками (запятыми здесь) не следует {space(s)}{digit} в конце:

,(?!\s+\d$)

Пример:

In [227]: text = '52A, XYZ Street, ABC District, 2'

In [228]: re.sub(',(?!\s+\d$)', '', text)
Out[228]: '52A XYZ Street ABC District, 2'

Edit:

Если у вас есть больше запятых после подстроки ,{space(s)}{digit} и вы хотите сохранить их все, используйте отрицательный взгляд, чтобы убедиться, что перед запятыми не стоит {space}{digit<or>[A-Z]}:

(?<!\s[\dA-Z]),(?!\s+\d,?)

Пример: * ** 1022 тысячу двадцать одна * In [229]: text = '52A, XYZ Street, ABC District, 2, M, Brown' In [230]: re.sub('(?<!\s[\dA-Z]),(?!\s+\d,?)', '', text) Out[230]: '52A XYZ Street ABC District, 2, M, Brown' In [231]: text = '52A, XYZ Street, ABC District, 2' In [232]: re.sub('(?<!\s[\dA-Z]),(?!\s+\d,?)', '', text) Out[232]: '52A XYZ Street ABC District, 2'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...