正则表达式:交流发电机订单问题

Regex: Alternators order issue

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

然后,如果有一个列表,例如 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 在交流发电机中匹配并用于断开字符串?

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

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

你会得到你想要的结果:

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

Demo on regex101

另请注意,CO. 中的 . 应进行转义。