1

私は初心者の Python コースを受講していますが、正規表現の置換を行う際に問題が発生しています。

質問の状態: file1、file2 などの名前を file01、file02 などに変更するが、file10 や file20 などの名前にゼロを追加しない置換コマンドを記述します。

これが私の解決策です:

re.sub(r'(\D+)(\d)$',r'\10\2','file1')

ご覧のとおり、0 は \1 参照を台無しにしています。誰でも簡単な解決策を手伝ってもらえますか? ありがとう!

4

3 に答える 3

2
import re
print re.sub(r'(\D+)(\d)$',r'\g<1>0\2','file1')

聞かないで.. \g<#> を実行するだけで、Python で問題なく動作します。他の言語にも同じ問題があります:

http://resbook.wordpress.com/2011/01/04/regex-with-back-references-followed-by-number/

于 2013-08-14T01:48:07.510 に答える
0

Pythonを知りませんが、正規表現では2桁ではなく1桁が必要です

試合では、このようにすることができます

.+[^\d]\d$

test1 は一致します test1 は一致しません

幸運を

于 2013-08-14T01:41:21.590 に答える
0

@sdanzig は正しい答えを持っていますが、どうしても質問したい場合は、実際には文書化された機能です。

http://docs.python.org/2/library/re.html

の最後の段落を読んでくださいre.sub()

文字列型の repl 引数では、上記の文字エスケープと後方参照に加えて、\g は、(?P...) 構文で定義されているように、name という名前のグループに一致する部分文字列を使用します。\g は対応するグループ番号を使用します。したがって、\g<2> は \2 と同等ですが、\g<2>0 などの置換ではあいまいではありません。\20 は、グループ 2 の後にリテラル文字 '0' が続く参照ではなく、グループ 20 への参照として解釈されます。後方参照 \g<0> は、RE によって一致する部分文字列全体を置き換えます。

于 2014-01-22T03:11:05.103 に答える