Python 正则表达式模式匹配,不包括案例列表
我想匹配的街道名称模式,其中包括几个大写字母,不包括一些情况下,但我不知道如何做到这一点 模式为“([A-Z][A-Z]+{1,3}”(假设街道名称由1-3个单词组成),短版本块列表为[“Apt”、“West”、“East”],表示方向或房间号 列表中的任何单词(例如“West”)都不应出现在匹配结果中。结果中应包含以方框列表中的单词开头的单词(例如“Westmoreland”)。我该如何编写这个正则表达式?您可以使用Python 正则表达式模式匹配,不包括案例列表,python,regex,Python,Regex,我想匹配的街道名称模式,其中包括几个大写字母,不包括一些情况下,但我不知道如何做到这一点 模式为“([A-Z][A-Z]+{1,3}”(假设街道名称由1-3个单词组成),短版本块列表为[“Apt”、“West”、“East”],表示方向或房间号 列表中的任何单词(例如“West”)都不应出现在匹配结果中。结果中应包含以方框列表中的单词开头的单词(例如“Westmoreland”)。我该如何编写这个正则表达式?您可以使用 \b(?!(?:Apt|West|East)\b)[A-Z][a-z]+(?
\b(?!(?:Apt|West|East)\b)[A-Z][a-z]+(?: (?!(?:Apt|West|East)\b)[A-Z][a-z]+){0,2}
见
我所做的:
- 修正了正则表达式实际匹配1到3个单词的问题:
[A-Z][A-Z]+(?:[A-Z][A-Z]+){0,2}
- 添加了负数lookahead以限制由
部分匹配的值[A-Z][A-Z]+
-一个大写ASCII字母(\b(?(?:Apt | West | East)\b[A-Z][A-Z]+
),后跟1+ASCII小写字母([A-Z]
),但我想你也可以使用[A-Z]
或[A-zA-Z]+
,它们不是一个完整的单词[A-zA-Z]*
,Apt
或West
,通过锚定在East
单词边界处的负前瞻而实现。第一个\b
是一个前导单词边界,然后负向前看确保单词边界后面和后面的\b
单词边界之前没有\b
、Apt
或West
(确保整个单词匹配)East
-0到2次出现:(?:(?!(?:Apt | West | East)\b[A-Z][A-Z]+{0,2}
-空格
-见上文。此处不需要前导词边界,因为(?!(?:Apt |西|东)\b[A-Z][A-Z]+
、Apt
或West
只能出现在此处空格后,空格是非单词字符East
(?: ?\b(?!(?:Apt|West|East)\b)[A-Z][a-z]+){1,3}
见
但是,起始处的可选空格也将与此前导空格匹配。而且,正则表达式现在不是线性匹配的,这会影响性能。使用小字符串是可以的,但这仍然是不好的做法。请您澄清一下好吗?添加一些应匹配和不应匹配的示例。顺便问一下,编程语言是什么?你已经写过代码了吗?请分享并告知你的困境。谢谢你看我的问题。整个街区列表包括各种形式的房间号和街道指示器(公寓、公寓、房间、rm、N、W、E、NW、西部、北部、大道、大道大道等)。任何与列表中的单词完全匹配的单词都不应出现在结果中,而仅以它们开头的单词应出现在列表中。例如,“West”不应该出现在结果中,而“Westmoreland”应该出现在结果中。我这样做是因为我想在物理地址的其他部分出现时重新停止。顺便说一句,我正在使用Python re moduel,我只知道如何编写大写部分,不知道如何从我的阻止列表中排除这些单词。下面是一个示例:“Poinsettia Pl Apt”应该与“Poinsettia Pl”匹配您是否尝试过用空字符串替换/*\b(Apt | plant | Room | rm |等)\b/(注意单词边界)?()