查找单字母基数方向的Python正则表达式

2024-09-30 14:22:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串,带有我家乡(休斯顿)的街道名称,如下所示:

  • “FM 517 W”
  • ‘FM E 42’
  • “凯蒂高速公路”

我试图创建一个正则表达式,找到单个字母的基本方向(N、S、E或W),并用完整的单词(北、南、东或西)替换它们

这是我到目前为止编写的代码:

single_cardinals = re.compile(r'[NnSsEeWw]+(/s)')

不幸的是,它没有拾取上面列出的任何字符串。regex在regexpal.com上工作:(

谢谢你的帮助! `


Tags: 字符串代码re名称字母方向高速公路街道
1条回答
网友
1楼 · 发布于 2024-09-30 14:22:02

您要查找的是\b单词边界分隔符,请参见this doc

正则表达式非常酷,因此在这里为您发布一个示例,说明如何在将来更好地利用它们

在下面的示例中,我将字符串分成3个可匹配的部分:(.*)\b([NnSsEeWw])\b(.*)

  • (.*)捕获它所能捕获的一切(注意:您可以将其更改为(.*?),问号将使正则表达式匹配可能最小的字符串,而不是可能最大的字符串-这样可以找到第一个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"))

相关问题 更多 >