查找单字母基数方向的Python正则表达式
我有一个字符串,带有我家乡(休斯顿)的街道名称,如下所示:查找单字母基数方向的Python正则表达式,python,Python,我有一个字符串,带有我家乡(休斯顿)的街道名称,如下所示: “FM 517 W” ‘FM E 42’ “凯蒂高速公路” 我试图创建一个正则表达式,找到单个字母的基本方向(N、S、E或W),并用完整的单词(北、南、东或西)替换它们 这是我到目前为止编写的代码: single_cardinals = re.compile(r'[NnSsEeWw]+(/s)') 不幸的是,它没有拾取上面列出的任何字符串。regex在regexpal.com上运行:( 谢谢你的帮助! `您要查找的是\b单词边界分
- “FM 517 W”
- ‘FM E 42’
- “凯蒂高速公路”
single_cardinals = re.compile(r'[NnSsEeWw]+(/s)')
不幸的是,它没有拾取上面列出的任何字符串。regex在regexpal.com上运行:(
谢谢你的帮助!
`您要查找的是
\b
单词边界分隔符,请参阅
正则表达式非常酷,因此在这里为您发布一个示例,说明如何在将来更好地利用它们
在下面的示例中,我将字符串分成3个可匹配的部分:(.*)\b([nnsseew])\b(.*)
捕获它所能捕获的一切(注意:您可以将其更改为(.*)
,问号将使正则表达式匹配尽可能最小的字符串,而不是尽可能最大的字符串-这将使它能够找到第一个NSEW字母,而不是最后一个-您可以使用虚构的地址(如(.*))
)来测试该边缘大小写,例如使用2FM W 517 W
-s以查看哪一个与两个变体匹配)W
用作单词边界(意思是:后面的内容不能在单词内)\b
- 然后捕获您的
[NnSsEeWw]
- 最后是另一个
(.*)
请显示您试图使用正则表达式搜索示例列表的代码。包括示例,并显示结果。您的基数字母后面不总是有空格。也许可以看看单词边界匹配?此外+是一个非常钝的工具,因为它允许匹配NE,但也允许匹配Ss-这并不难列举所有可能的基本点,是吗?如果可以的话,再细化它。谢谢你的帮助,我相信“+”干扰我的括号搜索。我实际上没有任何NW,NE等字符。只有4个基本的。我已经更新了3个问题:找到基数,如果它是在结尾,在开始,或在中间。这是我产生的代码,它的工作:<代码>结束= RE。编译(R’(^ ^)[ NSnSW W] $)<代码> >代码>中间=重新编译。(r'()[nnsseew]())
start=re.compile(r'(^)[nnsseew]())
这正是我要找的!你的解释很漂亮,帮助很大,非常感谢!
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"))