我有一些生成正则表达式的代码。那么实际上下面的表达式:
^(?:\s*((exclude|include|hide|show|protect|risk|dir-merge|merge)),\s*((-|+|H|S|P|R|:|.))\s*(\S+)|\s*,?\s*((-|+|H|S|P|R|:|.))\s*(\S+)|\s*((exclude|include|hide|show|protect|risk|dir-merge|merge))\s*(\S+))$
它看起来很复杂,但它本质上是为了匹配文件中的以下行:
dir-merge, : /some/file
merge, . /some/other/file
. /another/file
, : /yet/another/file
因此\s*
,导致 Python 正则表达式编译错误的匹配项。
有没有更好的方法来匹配单个表达式中的这些组合而不匹配nothing
?
已回答
除了答案之外,值得一提的是,我通过形成以下表达式解决了这个问题:
^(?:\s*(exclude|include|hide|show|protect|risk|dir-merge|merge),\s*([-+HSPR:.])\s*(\S+)|\s*,?\s*([-+HSPR:.])\s*(\S+)|\s*(exclude|include|hide|show|protect|risk|dir-merge|merge)\s*(\S+))$
细微的差别是从(-|+|H|S|P|R|:|.)
到的过渡([-+HSPR:.])
。方括号有转义字符的作用,防止|+
表达式匹配nothing
。