Как выполнить этот RegExp в Python? - PullRequest
0 голосов
/ 12 октября 2009

Я хотел бы преобразовать номер телефона этой формы +33.300000000 в 03.00.00.00.00

+ 33 указывает, что это может быть длина 2 или 3 цифры.

Цифры после. являются номером телефона. Это может быть длина 9 или 10 цифр.

Я пытаюсь так:

p = re.compile( "\+[0-9]+\.([0-9]+)", re.VERBOSE)
number = "+33.300000000"
p.sub("0\1", number)

Но это не работает.

Однако поиск швов для работы:

>>> p.search(number).groups()
('300000000',)

А после как изменить 0300000000 в 03.00.00.00.00 в Python?

Спасибо за помощь,

Natim

Ответы [ 2 ]

3 голосов
/ 12 октября 2009

Самый простой подход - это сочетание RE и манипуляции с чистой строкой, например ::100100

import re

def doitall(number):
  # get 9 or 10 digits, or None:
  mo = re.search(r'\d{9,10}', number)
  if mo is None: return None
  # add a leading 0 if they were just 9
  digits = ('0' + mo.group())[-10:]
  # now put a dot after each 2 digits
  # and discard the resulting trailing dot
  return re.sub(r'(\d\d)', r'\1.', digits)[:-1]

number = "+33.300000000"
print doitall(number)

испускает 03.00.00.00.00, как требуется.

Да, вы можете делать все это в RE, но это не стоит головной боли - микс работает отлично; -).

0 голосов
/ 12 октября 2009

В терминале это работает так:

p = re.compile( "\+[0-9]+\.([0-9]+)", re.VERBOSE)
number = "+33.300000000"
p.sub("0\\1", number)

И в скрипте Python это работает так:

p = re.compile( "\+[0-9]+\.([0-9]+)", re.VERBOSE)
number = "+33.300000000"
p.sub("0\1", number)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...