5

我有许多地址,例如“East 19th Street”或“West 141st Street”,我想在一次调用 re.sub 时删除“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)

\b防止21strange被替换之类的东西。

要仅替换语法正确的结构,您还可以尝试:

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

这将替换23rd并保留44th无效的内容,例如23st完好无损。不知道这是否值得麻烦。

于 2013-01-23T11:20:53.583 回答