2

私は文字列を持っています:

s = 'This is a number -N-'

-N-プレースホルダーを正規表現に置き換えたい:

s = 'This is a number (\d+)'

したがって、後で正規表現として使用sして、別の文字列と照合できます。

re.match(s, 'This is a number 2')

ただし、スラッシュをエスケープしない正規表現で s を置き換えることはできません。

re.sub('-N-', r'(\d+)', 'This is a number -N-')
# returns 'This is a num (\\d+)'

私がここで間違っていることを教えてください。ありがとう!

4

2 に答える 2

4

文字列には single のみが含まれます。実際の文字列出力を確認するため\に使用します。print

strバージョン:

>>> print re.sub(r'-N-', r'(\d+)', 'This is a number -N-')
This is a number (\d+)

reprバージョン:

>>> re.sub(r'-N-', r'(\d+)', 'This is a number -N-')
'This is a number (\\d+)'
>>> print repr(re.sub(r'-N-', r'(\d+)', 'This is a number -N-'))
'This is a number (\\d+)'

したがって、正規表現は正常に機能します。

>>> patt = re.compile(re.sub(r'-N-', r'(\d+)', 'This is a number -N-'))
>>> patt.match('This is a number 20').group(1)
'20'
>>> regex = re.sub(r'-N-', r'(\d+)', 'This is a number -N-')
>>> re.match(regex, 'This is a number 20').group(1)
'20'

詳細については:Difference between __str__ and __repr__ in Python

于 2013-08-28T13:12:36.317 に答える
-1

単に置換を使用しないのはなぜですか?

 s.replace('-N-','(\d+)')
于 2013-08-28T13:10:25.970 に答える