鱼C论坛

 找回密码
 立即注册

扫一扫,访问微社区

查看: 386|回复: 6

求助python正则的用法

[复制链接]
最佳答案
6 
发表于 2019-3-25 20:51:28 | 显示全部楼层 |阅读模式
10鱼币
代码1:
>>> m = re.match("([abc])+", "abc")
>>> m.groups()
('c',)

代码2:
>>> p = re.compile(r'(\b\w+)\s+\1')
>>> p.search('Paris in the the spring').group()
'the the'



问题1:没有明白'([abc])+' 是什么含义,为什么要加个括号,这里不就是表达重复abc 一次或多次么,返回结果也没看懂?

问题2:  \b不就是表示单词边界吗,为什么要加上这个;另麻烦也解释这个正则表达式吧?

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
1675 
发表于 2019-3-25 21:04:15 | 显示全部楼层
1重复a,b,c三个中选一个字母,重复这样的选择一次或多次,因为就一个括号,所以最后匹配c
2是单词边界,\1匹配之第一个括号内的子组,所以就相当于2个相同的\b\w+之间有\s+分割,\s可以匹配空格,\b\w+匹配the
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
6 
 楼主| 发表于 2019-3-25 22:08:24 | 显示全部楼层
塔利班 发表于 2019-3-25 21:04
1重复a,b,c三个中选一个字母,重复这样的选择一次或多次,因为就一个括号,所以最后匹配c
2是单词边界,\ ...

"因为就一个括号,所以最后匹配c"
这句话怎么理解啊,为什么一个括号就匹配c了,为什么不是a,或b
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
1675 
发表于 2019-3-25 22:13:53 | 显示全部楼层
开始从a,b,c依次匹配,但是[abc]每次只能捕获一个元素,到最后就是c
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
8 
发表于 2019-3-29 15:38:59 | 显示全部楼层
1
re groups.png
re.groups()的文档如图 返回的是group(1),group(2),.....
m = re.match("([abc])+", "abc") 只有一个括号 所以只有1组group(1) 括号里的内容是[abc] 代表abc中任意字符 +在外面找不到
那么这里m.groups() 等价于 m.group(1) ,
至于为什么m.group(1)是'c'而不是'a' 我也不太清楚...应该和re的匹配算法有关 调试的话 m=<re.Match object; span=(0, 3), match='abc'>

2.
>>> p = re.compile(r'(\b\w+)\s+\1')
>>> p.search('Paris in the the spring').group()
'the the'

正则表达式括号内是'边界-字符1个以上' 这个括号是匹配组1 后面的\1 指定这个匹配组1的返回结果
参考http://www.cnblogs.com/linux-wangkun/p/5978462.html
https://fishc.com.cn/thread-57271-1-1.html 结尾提了一句
整个表达式是找(边界)单词-空格-前面找到的那个(边界)单词 的模式

不加\b边界 试试要匹配的字符串换成'paris in fuckingthe the spring' 一样能找出来'the the' 然而这明显不是要找的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
24 
发表于 2019-5-8 12:23:59 | 显示全部楼层
本帖为密码帖 ,请输入密码 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
最佳答案
24 
发表于 2019-5-8 12:40:46 | 显示全部楼层
1.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

小甲鱼强烈推荐上一条 /1 下一条

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号

GMT+8, 2019-8-26 16:02

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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