2013-05-23 5 views
1

Я пытаюсь изменить текстовую строку от формы file1 до file01. Я действительно новичок в python и не могу понять, что следует делать в месте «repl» при попытке использовать шаблон. Может ли кто-нибудь дать мне руку?re.sub in Python 3.3

text = 'file1 file2 file3' 

x = re.sub(r'file[1-9]',r'file\0\w',text) #I'm not sure what should go in repl. 

ответ

3

Вы можете попробовать это:

>>> import re  
>>> text = 'file1 file2 file3' 
>>> x = re.sub(r'file([1-9])',r'file0\1',text) 
'file01 file02 file03' 

Кронштейны обернутые вокруг [1-9] захватывает матч, и это первый матч. Вы увидите, что я использовал его в замене, используя \1, что означает первый улов в матче.

Кроме того, если вы не хотите, чтобы добавить ноль для файлов с 2-х цифр или больше, вы можете добавить [^\d] в регулярном выражении:

x = re.sub(r'file([1-9](\s|$))',r'file0\1',text) 
+1

В последнем примере вам нужно как минимум сделать '([^ \ d] | $)' или вы не можете сопоставить последнее вхождение в строке. – melwil

+0

@melwil Спасибо, исправлено это сейчас :) – Jerry

+0

Теперь вы слишком много соответствуете в группе 1, вы включаете пробел в группе, что делает файл 'file1 file2'' 'file01file02'. – melwil

0

Вы можете использовать группы, чтобы захватить те части, которые вы хотите сохранить, затем использовать эти группы в тексте замещения.

x = re.sub(r'file([1-9])',r'file0\1',text) 

Совпадение группа создается в том числе () в поиске регулярных выражений. Затем вы можете использовать его с \group или \1 в этом случае, так как мы хотим, чтобы первая группа была вставлена.

1

Для сопоставления файлов с одной цифрой на конце, используйте границу слова \b:

>>> text = ' '.join('file{}'.format(i) for i in range(12)) 
>>> text 
'file0 file1 file2 file3 file4 file5 file6 file7 file8 file9 file10 file11' 
>>> import re 
>>> re.sub(r'file(\d)\b',r'file0\1',text) 
'file00 file01 file02 file03 file04 file05 file06 file07 file08 file09 file10 file11' 
0

Я считаю, что следующие поможет вам. Это выгодно тем, что он будет только вставить «0», где есть одна цифры после «файла» (через границу [ «\ Ь»] специальное включение символов):

text = 'file1 file2 file3' 

findallfile = re.findall(r'file\d\b', text) 

for instance in findallfile: 
    textwithzeros = re.sub('file', 'file0', text) 

«textwithzeros» теперь должно быть новая версия строки «text» с «0» перед каждым номером. Попробуйте!