1

私は Python の初心者なので、私の正規表現スキルはレベル -122 であることを覚えておいてください。

を含むテキストを含む文字列を変換する必要がありますが、に変換する必要はfile1ありませfile01ん。file10file010

私のプログラムは間違っていますが、これは私が得ることができる最も近いものです。何十もの組み合わせを試しましたが、近づくことはできません:

import re
txt = 'file8, file9, file10'
pat = r"[0-9]"
regexp = re.compile(pat)
print(regexp.sub(r"0\d", txt))

誰かが私のパターンと置換の何が問題なのか教えてくれますか?

4

3 に答える 3

1

0 を追加する前に数値をキャプチャして長さを確認できますが、代わりにこれを使用できる場合があります。

import re
txt = 'file8, file9, file10'
pat = r"(?<!\d)(\d)(?=,|$)"
regexp = re.compile(pat)
print(regexp.sub(r"0\1", txt))

正規表現101のデモ

(?<! ... )を否定後読みと呼びます。これにより、パターンの後のパターンが否定後読みのパターンに一致する場合、(否定的な) 一致が防止されます。たとえば、前にがある場合を除き、文字列内の(?<!a)bすべてに一致します。つまり、一致しますが、一致しません。したがって、前に別の数字がない限り、数字に一致します。babbcbab(?<!\d)(\d)

(\d)単一の数字で、キャプチャ グループに囲まれ、単純な括弧で示されます。キャプチャされたグループは、最初のキャプチャ グループに格納されます。

(?= ... )前向きな先読みです。これは、肯定先読み内のパターンが、この肯定先読みの前のパターンの後に一致する場合にのみ一致します。つまり、後にa がある場合にのみ、文字列内のa(?=b)すべてに一致します。一致するかどうか。ababacaa

(?=,|$),|$コンマまたは文字列の末尾のいずれかを意味する肯定的な先読みです。

(?<!\d)(\d)(?=,|$)したがって、その前に数字がなく、その後にカンマがある限り、またはその数字が文字列の末尾にある限り、任意の数字と一致します。

于 2013-10-03T05:53:06.920 に答える
0

このアプローチでは、正規表現を使用してすべての数字のシーケンスを検索str.zfillし、ゼロで埋めます。

>>> txt = 'file8, file9, file10'
>>> re.sub(r'\d+', lambda m : m.group().zfill(2), txt)
'file08, file09, file10'
于 2013-10-03T06:50:25.973 に答える
0

どうですか?

a='file1'    
a='file' + "%02d" % int(a.split('file')[1])
于 2013-10-03T06:01:45.367 に答える