1

我有这个正则表达式:

\ba\.?b\.?c\.?\b( something)?

匹配的

  • 美国广播公司
  • 美国广播公司
  • abc 的东西
  • ...

我按重要性顺序使用了 2 次:首先我尝试^在行首和$行尾添加,因为我想找到一个与上述情况完全相同的字符串。如果什么也没找到,约束被删除,我接受了类似的字符串

  • 富 abc 富
  • 废话 abc 废话

问题是在第一种情况a.b.c.\b$. 所以如果我使用

^\ba\.?b\.?c\.?\b( something)?$

简单a.b.c.的不匹配,因为圆括号中的部分被“忽略”并且\b靠近的部分$具有我无法理解的行为。另一方面a.b.c(没有最后一个点)将匹配

如果我在一切正常的情况下更改第二个\b\W但我不确定我是否会匹配其他不需要的字符串。关于如何仅使用一个正则表达式解决此问题的任何想法?

如果这可能相关,我正在使用 Python

4

1 回答 1

0

问题只是来自\b(参见源代码)的含义。这部分\.\b$永远不会匹配任何内容,因为没有要匹配的单词边界位置(点和字符串末尾之间的位置不是单词边界位置)。
你应该试试:

^\ba\.?b\.?c\.?(?:\b|$)

反而。

对于“某事”部分,它会给出:

^\ba\.?b\.?c\.?(?:\b|$)( something)?$

(这里可能有一些改进,但它应该工作)

于 2013-04-16T14:40:10.433 回答