re.sub ў Python 3.3

Я спрабую змяніць тэкставую радок з выгляду file1 на file01 . Я сапраўды пачатковец у Python і не магу зразумець, што павінна пайсці ў лакацыі «Адк» пры спробе выкарыстоўваць шаблон. Можа хто-небудзь даць мне руку?

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.
1

8 адказы

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

>>> 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)
4
дададзена
@melwil Дзякуй, усталяваў яго зараз :)
дададзена аўтар Jerry, крыніца
@melwil На гэты раз, я праверыў яго загадзя, і яна працуе лепш, чым папярэдні файла ([1-9]) ([^ \ d] | $) . Папярэдні адзін з'есць прастору з-за [^ \ d] і мне прыйшлося б дадаць больш сімвалаў, каб кампенсаваць гэта, у той час як гэта адзін вырашае абедзве праблему адначасова.
дададзена аўтар Jerry, крыніца
Вы павінны па крайняй меры зрабіць ([^ \ d] | $) ў апошнім прыкладзе няма, ці вы не можаце адпавядаць апошняе ўваходжанне ў радок.
дададзена аўтар melwil, крыніца
Цяпер вы ўзгаднення занадта шмат у 1-й групе, вы ў тым ліку месца ў групе, што робіць file1 file2 стаць file01file02 .
дададзена аўтар melwil, крыніца
Ах да, вы, вядома, пакласці прастору назад. Шкада пра гэта.
дададзена аўтар melwil, крыніца

Для параўнання файлаў з аднаго лічбай на канцы, выкарыстоўвайце слова мяжу \ б :

>>> 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'
1
дададзена

Для параўнання файлаў з аднаго лічбай на канцы, выкарыстоўвайце слова мяжу \ б :

>>> 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'
1
дададзена

яго таксама можна выкарыстоўваць \ D | $ пры праверцы двух лічбаў прысутнасці з файлам, які вырашае, ці варта замяняць файлы file0 ці не

наступны код будзе таксама спрыяць дасягненню патрабаванага.

імпарт паўторна

тэкст = 'file1 file2 file3 file4 file11 file22 file33 file1'

х = re.sub (r'file ([0-9] (\ D | $)), r'file0 \ 1 ', тэкст)

друк (х)

1
дададзена

яго таксама можна выкарыстоўваць \ D | $ пры праверцы двух лічбаў прысутнасці з файлам, які вырашае, ці варта замяняць файлы file0 ці не

наступны код будзе таксама спрыяць дасягненню патрабаванага.

імпарт паўторна

тэкст = 'file1 file2 file3 file4 file11 file22 file33 file1'

х = re.sub (r'file ([0-9] (\ D | $)), r'file0 \ 1 ', тэкст)

друк (х)

1
дададзена

Можна выкарыстоўваць групы, каб захапіць тыя часткі, якія вы хочаце захаваць, а затым выкарыстоўваць гэтыя групы ў тэксце замены.

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

Супадзенне група ствараецца ў тым ліку () ў пошуку рэгулярных выразаў. Пасля гэтага вы можаце выкарыстоўваць яго з \ групы , або \ 1 у гэтым выпадку, так як мы хочам у першую групу, устаўлены.

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» зараз павінна быць новая версія «тэкст» радкі з "0" перад кожным нумарам. Паспрабуйце гэта!

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» зараз павінна быць новая версія «тэкст» радкі з "0" перад кожным нумарам. Паспрабуйце гэта!

0
дададзена