Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式模式匹配,不包括案例列表_Python_Regex - Fatal编程技术网

Python 正则表达式模式匹配,不包括案例列表

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]+(?

我想匹配的街道名称模式,其中包括几个大写字母,不包括一些情况下,但我不知道如何做到这一点

模式为“([A-Z][A-Z]+{1,3}”(假设街道名称由1-3个单词组成),短版本块列表为[“Apt”、“West”、“East”],表示方向或房间号

列表中的任何单词(例如“West”)都不应出现在匹配结果中。结果中应包含以方框列表中的单词开头的单词(例如“Westmoreland”)。我该如何编写这个正则表达式?

您可以使用

\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]+
    部分匹配的值
表达式详细信息

  • \b(?(?:Apt | West | East)\b[A-Z][A-Z]+
    -一个大写ASCII字母(
    [A-Z]
    ),后跟1+ASCII小写字母(
    [A-Z]
    ),但我想你也可以使用
    [A-zA-Z]+
    [A-zA-Z]*
    ,它们不是一个完整的单词
    Apt
    West
    East
    ,通过锚定在
    \b
    单词边界处的负前瞻而实现。第一个
    \b
    是一个前导单词边界,然后负向前看确保单词边界后面和后面的
    \b
    单词边界之前没有
    Apt
    West
    East
    (确保整个单词匹配)
  • (?:(?!(?:Apt | West | East)\b[A-Z][A-Z]+{0,2}
    -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/(注意单词边界)?()