我有一些生成正则表达式的代码。实际上,下面的表达式是:
^(?:\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 regex编译错误。你知道吗
有没有更好的方法在单个表达式中匹配这些组合而不匹配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
。你知道吗
你似乎有不止一个问题。“无需重复”可以很容易地复制:
+
表示“匹配前面的一个或多个”,但在+
前面有一个空字符串。你的意思可能是在几个地方说\+
,而不是普通的+
。你知道吗相关问题 更多 >
编程相关推荐