3

都市と数字の間のスペースをコンマに置き換えたいのですが、思いついた行 (およびそのバリエーション) は文字列を消し去っているようです。

>>> temp = re.sub(r"(\w+).*?(\d+)", ",", string)

どこstringに似ています:

Toronto 239495
Cape Town 34567

これどうやってするの?

私はまだ正規表現を取り上げているので、コードの説明は本当に素晴らしいでしょう。

4

3 に答える 3

6

正しい一致を置き換えていますが、コンマのみを使用しています。試合の他の部分も置き換えられます。アサーションを使用することも、単にそれらを元に戻すこともできます。

temp = re.sub(r"(\w+).*?(\d+)", r"\1,\2", string)

ただし、\w+はでのみ一致CapeCape Townます。どうですか:

temp = re.sub(r"(.+?)\s*(\d+)", r"\1,\2", string)
于 2013-02-13T00:27:32.083 に答える
3

先読みと先読みを使用できます:

In [1]: s = 'Toronto 239495 Cape Town 34567'

In [2]: re.sub(r"(?<=\w)\s(?=\d+)", ",", s)
Out[2]: 'Toronto,239495 Cape Town,34567'
于 2013-02-13T00:29:25.503 に答える
2

これを試して:

In  [1]: string = "Toronto 239495 Cape Town 34567"

In  [2]: re.sub(r"(\w)\s+(\d)", r"\1,\2", string)
Out [2]: 'Toronto,239495 Cape Town,34567'

この場合、都市の名前全体と一致する理由はありません。これは、文字の後に少なくとも1つのスペースが続き、その後に数字が続く場合に一致します。次に、スペースを1つのコンマに置き換えます。

于 2013-02-13T00:28:31.537 に答える