这个正则表达式有问题,第二个问號后面应该加冒号吧(?(1)y|x)应该是(?:(1)y|x)
(1)可能是表示数字1也可能是前面加反斜杠的\1,指代前面第一个括号内的x即(?:(x)|y)中的x,这叫做反向引用.
(?: )表示匹配某一表达式,泹不代表分组,不捕获匹配的内容
(x)表示第一捕获分组中,有一个字母x
\1表示反向引用指代前面第一捕获分组中的x
看我补图 在python idle中运行没有错误 匹配嘚字符串是 ‘xy’或者是‘yx’两个
这是Python2.4 以后的 re 模块新加入的一个条件匹配功能
(?( id/name )yes-pattern|no-pattern) 判断指定组是否已匹配,执行相应的规则.
这个规则的含义是如果 id/name 指定的组在前面匹配成功了,则执行 yes-pattern 的正则式否则执行 no-pattern 的正则式。
也就是说如果匹配了x那么后面就匹配y,如果没有匹配成功x匹配了y,那么后面就匹配x
也就是说?:(x)这个片段 虽然不保存分组 依然可以用1引用是吧 引用的时候不应该用'\1'吗
还有就是(lala(aa))这种表达式 引用的数字是从里面往外计数的吗?
(?:(x)|y)中的(?: )不保存分组,但是(x)是第一捕获分组所以后面用?(1)引用(x)的分组,如果(x)成功匹配,则后面匹配y,如果(x)没有成功匹配匹配了y,则后面匹配x.
这是一个新的条件匹配功能,完整的公式(?(1)y|x),如果匹配第一分组数据就执行y,否则执行x.这里这个条件分组前面不加反斜杠.
(lala(aa))引用的数字是從左向右计数,这里最外面是\1,里面的是\2.
你对这个回答的评价是