找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3711|回复: 1

[已解决] python初学正则表达式 求帮助 谢谢

1

主题

1

帖子

1

积分

贫民

积分
1
ASound 发表于 2016-8-27 11:09:38 | 显示全部楼层 |阅读模式
环境:
Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:54:25) [MSC v.1900 6
D64)] on win32
Type "help", "copyright", "credits" or "license" for more information.


问题:
有两条语句: re.findall(r'(x)|y(?(1)y|x)','xy') 和 re.findall(r'(x)|y(?(1)y|x)','xx'),这两条语句的结果不同,没想明白为啥。
>>> re.findall(r'(x)|y(?(1)y|x)','xy')
['x']
>>> re.findall(r'(x)|y(?(1)y|x)','xx')
['x', 'x']



请问
1.  r'(x)|y(?(1)y|x)'中的(1)所指向的内容的具体解答,有点疑惑,有些书上好像是写的匹配的整个字符串,有的写的是第一个匹配的子串?
2. r'(x)|y(?(1)y|x)'的具体的意思是什么,是不是 这样解释:
    单个字符x或者y后面跟着一个字符y(如果前面出现的是x)或者x(如果前面出现的是y)?


但是这样理解的话和结果匹配不上啊。


求大侠解惑。。

谢谢
回复

使用道具 举报

3

主题

9

帖子

9

积分

贫民

积分
9
留校察看 发表于 2016-8-27 17:57:19 | 显示全部楼层
(?(1)y|x): (1)是前面匹配的第一项,如果匹配,会再匹配y,否则会匹配x
(x) | y:要么匹配x,要么匹配y 只有x有标号,

re.findall(r'(x)|y(?(1)y|x)','xy') 匹配过程:先匹配x,并且x是用括号括起来的,所以(1)就代表x,就会去匹配y,正好也匹配上xy,所以会输出匹配项,即x;因此类推
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表