我有许多地址,例如“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")
不起作用,因为它并不总是第一个被抓住的群体
我可以链接潜艇,但它很脏。帮助表示赞赏
让我们试试这个:
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
完好无损。不知道这是否值得麻烦。