(.*)捕获它所能捕获的一切(注意:您可以将其更改为(.*?),问号将使正则表达式匹配可能最小的字符串,而不是可能最大的字符串-这样可以找到第一个NSEW字母,而不是最后一个-您可以使用类似FM W 517 W的虚构地址(例如,使用2W)测试该边大小写-s以查看哪一个与两个变体匹配)
\b用作单词边界(意思是:后面的内容不能在一个单词内)
然后您的[NnSsEeWw]被捕获
最后是另一个(.*)中的剩余文本
import re
single_cardinals = re.compile(r"(.*)\b([NnSsEeWw])\b(.*)")
long_cardinals = {"N": "North", "S": "South", "E": "East", "W": "West"}
def expanded_cardinals(text):
m = single_cardinals.match(text)
if m:
short = m.group(2).upper()
if short in long_cardinals:
expanded = (m.group(1), long_cardinals[short], m.group(3))
text = "".join(expanded)
return text
print(expanded_cardinals("FM 517 W"))
print(expanded_cardinals("FM E 42nd"))
print(expanded_cardinals("N Katy Freeway"))
print(expanded_cardinals("Montgomery"))
您要查找的是
\b
单词边界分隔符,请参见this doc正则表达式非常酷,因此在这里为您发布一个示例,说明如何在将来更好地利用它们
在下面的示例中,我将字符串分成3个可匹配的部分:
(.*)\b([NnSsEeWw])\b(.*)
(.*)
捕获它所能捕获的一切(注意:您可以将其更改为(.*?)
,问号将使正则表达式匹配可能最小的字符串,而不是可能最大的字符串-这样可以找到第一个NSEW字母,而不是最后一个-您可以使用类似FM W 517 W
的虚构地址(例如,使用2W
)测试该边大小写-s以查看哪一个与两个变体匹配)\b
用作单词边界(意思是:后面的内容不能在一个单词内)[NnSsEeWw]
被捕获(.*)
中的剩余文本相关问题 更多 >
编程相关推荐