首页 > 解决方案 > 正则表达式:交流发电机订单问题

问题描述

在正则表达式中使用交替时,我们应该在交替器中包含项目,以避免受到引擎急切的影响。

然后,如果有一个列表,co,co.,co-op,association,assoc我们应该更喜欢包含它们以获得最精确的匹配。然后,这应该更改为association,assoc,co-op,co.,co.

如果包含连字符或斜杠,我有一个基本的正则表达式模式将一个单词分成两部分,所以我只得到连字符或斜杠之前的部分:

(.*(?<!\w)(CO-OP|CO|CO.)(?!\w).*)[-/](\s*\w+.*)

但是,此正则表达式在提供ABC CO-OP ELEMENTARY SCHOOL. 这个字符串正在变得公正ABC CO。但是,如果我从交流发电机中移除 CO,则字符串会以其正确的原始形式返回ABC CO-OP ELEMENTARY SCHOOL。另外,字符串ARMSTRONG CO-OP ELEMENTARY SCHOOL / ECOLE PRIMAIRE ARMSTRONG COOPERATIVE要断成ARMSTRONG CO-OP ELEMENTARY SCHOOL没有斜线后的字符串。

为什么CO在交流发电机中匹配并用于断弦?

标签: pythonregexregex-alternation

解决方案


您的问题是您的正则表达式要求字符串中有 a-或 a \,因此它强制在inABC CO-OP ELEMENTARY SCHOOL上拆分。如果你:-CO-OP

  1. 使正则表达式的第二部分可选;
  2. .*将第一组末尾的更改为惰性 ( .*?);和
  3. 添加开始和结束字符串锚点

你会得到你想要的结果:

^(.*(?<!\w)(?:CO-OP|CO|CO\.)(?!\w).*?)(?:[-/](\s*\w+.*))?$

正则表达式 101 上的演示

还要注意.inCO.应该被转义。


推荐阅读