11

次の正規表現の置換があります。

input=re.sub( r"([a-zA-Z0-9])\s+([a-zA-Z0-9])" , r"\1*\2" , input )

string に正規表現を使用します"3 a 5 b"

戻り"3*a 5*b"ます。

私 は 戻る べき だと 思っ て"3*a*5*b"いる .

そのため、どういうわけか、正規表現の置換が互いに干渉しています。

正規表現を繰り返し実行する以外に、必要な結果を得るにはどうすればよいですか?

4

2 に答える 2

24

2 番目のパターンを食い尽くさないように、先読みアサーション,を使用します。(?=...)

In [33]: re.sub( r"([a-zA-Z0-9])\s+(?=[a-zA-Z0-9])" , r"\1*" , '3 a 5 b')
Out[33]: '3*a*5*b'

In [32]: re.sub( r"([a-zA-Z0-9])\s+(?=[a-zA-Z0-9])" , r"\1*" , "3 /a 5! b" )
Out[32]: '3 /a*5! b'
于 2013-03-08T19:40:52.870 に答える
1

Python を使用する場合、正規表現は常に最適なツールとは限りません。上記の場合、Python は、はるかに単純で、読みやすく、保守しやすい方法を提供します。

>>> s = "3 a 5 b"
>>> '*'.join(s.split())
'3*a*5*b'
于 2013-03-08T19:40:13.517 に答える