5

"East 19th Street" や "West 141st Street" のような住所がたくさんあるので、re.sub への 1 回の呼び出しで "th" と "st" を削除したいと考えています。

re.sub("(\d+)st|(\d+)nd|(\d+)rd|(\d+)th", "g<1>", "East 19th Street")

キャッチされるのは常に最初のグループであるとは限らないため、機能しません

サブをチェーンできましたが、汚れています。助けていただければ幸いです

4

1 に答える 1

12

これを試してみましょう:

re.sub(r"(\d+)(st|nd|rd|th)\b", r"\1", str)

またはそれ以上

re.sub(r"(?<=\d)(st|nd|rd|th)\b", '', str)

\b21strange交換などを防ぎます。

文法的に正しい構造のみを置き換えるには、次のことも試してください。

re.sub(r"(?<=1\d)th\b|(?<=1)st\b|(?<=2)nd\b|(?<=3)rd\b|(?<=[04-9])th\b", r'', str)

これは、無効なものを置き換えますが23rd、そのまま残します。ただし、これが面倒な価値があるかどうかはわかりません。44th23st

于 2013-01-23T11:20:53.583 に答える