线末端的点和字边界

时间:2013-04-16 14:28:09

标签: python regex word-boundary end-of-line

我有这个正则表达式:

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

匹配

  • ABC
  • A.B.C。
  • A.B.C。东西
  • ...

我按重要性顺序使用它2次:首先我尝试在开头添加^,在行尾添加$因为我想找到一个完全符合这些情况的字符串以上。如果找不到任何内容,则会删除约束,并且我接受了

之类的字符串
  • foo abc foo
  • blah a.b.c.某事blah

问题出在a.b.c.的第一种情况,其中\b$混乱。 所以,如果我使用

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

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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

代替。

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

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

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