Regex для упаковки цифр с помощью фигурных скобок? - PullRequest
2 голосов
/ 29 сентября 2011

Я пытаюсь использовать re.sub() в Python для сопоставления строки с символом e и вставки фигурных скобок сразу после символа e и после последней цифры. Например:

12.34e56 to 12.34e{56}
1e10 to 1e{10}

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

>>> import re
>>> x = '12.34e10'
>>> pattern = re.compile(r'(e)')
>>> sub = z = re.sub(pattern, "\1e{", x)
>>> print(sub)
    12.34e{10 # this is the correct placement for the left brace

Моя проблема возникает при использовании двух обратных ссылок.

>>> import re
>>> x = '12.34e10'
>>> pattern = re.compile(r'(e).+($)')
>>> sub = z = re.sub(pattern, "\1e{\2}", x)
>>> print(sub)
    12.34e{} # this is not what I want, digits 10 have been removed

Кто-нибудь может указать на мою проблему? Спасибо за помощь.

Ответы [ 2 ]

7 голосов
/ 29 сентября 2011
re.sub(r'e(\d+)', r'e{\1}', '12.34e56')

возвращает '12.34e{56}'

или тот же результат, но с другой логикой (не заменяйте e на e):

re.sub(r'(?<=e)(\d+)', r'{\1}', '12.34e56')
1 голос
/ 29 сентября 2011

Неправильное размещение фигурной скобки.

Вот решение, обеспечивающее наличие числа с необязательным десятичным знаком перед e:

import re
samples = ['12.34e56','1e10']
for s in samples:
  print re.sub(r'(\d+(?:\.\d+)?)e([0-9]+)',"\g<1>e{\g<2>}",s)

Выход:

12.34e{56}
1e{10}
...