我有这个正则表达式:
\ba\.?b\.?c\.?\b( something)?
匹配
我按重要性顺序使用它2次:首先我尝试在开头添加^
,在行尾添加$
因为我想找到一个完全符合这些情况的字符串以上。如果找不到任何内容,则会删除约束,并且我接受了
问题出在a.b.c.
的第一种情况,其中\b
与$
混乱。
所以,如果我使用
^\ba\.?b\.?c\.?\b( something)?$
简单a.b.c.
未匹配,因为圆括号中的部分被“忽略”,\b
附近的$
有一种我无法理解的行为。另一方面,a.b.c
(没有最后一个点)将匹配
如果我用\b
更改第二个\W
一切正常,但我不确定我是否会匹配其他不需要的字符串。关于我如何只用一个正则表达式来解决这个问题的任何想法?
如果这可能是相关的,我正在使用Python
答案 0 :(得分:0)
问题仅来自\b
的含义(见source)。此部分\.\b$
永远不会匹配任何内容,因为没有要匹配的单词边界位置(点和字符串末尾之间的位置不是单词边界位置)。
你应该试试:
^\ba\.?b\.?c\.?(?:\b|$)
代替。
对于“某事”部分,它会给出:
^\ba\.?b\.?c\.?(?:\b|$)( something)?$
(这里可能会有一些改进,但它应该有效)