python 正则表达式 匹配成对出现的词 的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python 正则表达式 匹配成对出现的词 的问题相关的知识,希望对你有一定的参考价值。
表达式 :p = re.compile(r'(\b\w+)\s+\1')
Paris in spring spring the the the
问题:
1, \1是什么意思, 在表达式表中没找到
2, 网上说的逆向引用没看懂 谁能帮忙说的直白一点 谢谢
3, 字符串 the也是成对出现的, 为什么只出现了spring呢
多谢
2.网上说的,很多解释的不清楚。
我专门为此写了教程,这下你应该能看懂了:
【教程】详解Python正则表达式之: (…) group 分组
3。之所以,只匹配了:
spring spring
没有把
the the
也显示出来,是因为你用的re.search。
re.search的功能是,找到 第一个匹配的,就停止继续查找了。
想要把spring spring和the the都查找出来,可以用
re.findall(r'(\b\w+)\s+\1')
或
re.findall(r'(?:\b\w+)\s+\1')
其中(?:xxx),表示匹配xxx,但是不捕获这个group,这样就可以输出正匹配的字符串了:
re.findall输出的,都是列表变量;
列表中的每个值,是所匹配的值。
如果里面带括号,即有group,则只显示第一个group。
此部分的内容,等我有空再给你写详细教程,到时候你就容易看懂了。
还有问题,到上面那个帖子后面留言。
(此处不给贴地址,自己搜标题,即可找到我写的这些教程
就冲着百度知道连正常的地址都不给贴这点,就不建议用百度搜,建议用google搜。) 参考技术A 在正则里\1表示第一个捕获的分组,这个例子里就是(\b\w+),意思是两个相同的单词,中间由\s+隔开,这个例子里spring和the都是匹配的,你应该是调用错了接口,使用findall可以看到匹配了两个单词.追问
那我可以用\2来表示第二个捕获的分组么?
PHP篇正则表达式
$rex=”/gg*d/i”表示匹配到g(G)开始d(D)结束且中间只能有G(D)出现任意次,不区分大小写
1、 定界符号:(1)/ 内容 / (2)|| (3){ } (4)等除字母、数字、“\\”以外的字符//必须成对出现
2、 内容里存在原子:原子是匹配单元,必须存在
可以为打印字符:[a-z]、[A-Z]、等可见字符
可以为非打印字符:键盘的回车对应\\n匹配
转义字符:如点代表所有字符所有可用\\.表示点,其他如【/】、【?】等
函数:preg_quote($字符串1)//会将字符串1中所有可转义的字符转义后返回新字符串
特殊符号字符:所有数字【\\d】、所有非数字【\\D】、任意一个字(a-z,A-Z,下划线)【\\w】、
任意非字【\\W】、任意一个原子【.】(点)
所有空白(空格、tab键、换行)【\\s】、任意非空白【\\S】
自定义:[字符1字符2字符3]//也可为[a-zA-Z]区间//匹配任意一个// ^为取反,写在中括号内
3、 内容里存在原子符:对原子的修饰补充
【*】修饰前面的单个原子可以出现任意次//如goodxgooodxgd 正则可写为:/go*d/
【+】修饰前面的单个原子至少要出现1次//如上 不可匹配gd
【?】修饰前面的单个原子只能出现0次或者1次
【{ n }】修饰前面的单个原子只能出现n次
【{a,b}】修饰前面的单个原子只能出现 [ a , b ] 次 //至少两次{2, }
【|】修饰两边字符串任意谁整体出现,/intelligent|diligent/
【^字符1】必须以字符1开始,/^xceee/必须以xceee为开始,写在表达式最前面
【$字符2】必须以字符2结尾,/\\Aaa.*wo$/必须以aa开始和wo为结束,.*表示任意
【\\A和\\Z】开始和结束,以上相同,但不可配合修正符【m】使用,只能表示最前与最后
【\\b】单词边界(空格),/\\bare\\b/,匹配字符串“ware are xxx”匹配到are单词,
【\\B】单词边界以外的部分
【()】改变优先级,/t(r|x)ol/,可匹配trol或者txol
以小变大:/tel*/表示l可出现任意次=>/t(el)*/表示el可出现任意次
用于取出:/t(el)(.*)/如"xxwtelelllll"输出telelllll el elllll
可在表达式中用\\1或者$1直接取第一个值
4、 内容修正符:对定界符内容的修正,写在定界符外右边
【i】不区分大小写,/teL/i可匹配tel、Tel、TEL 等
【m】换行后不示为不同行,默认将\\n换行示为以上一行为同一行,/^aa/使用有区别
【A】同\\A相同匹配开头,以【m】无法同步使用
【s】修正表达式中【.】可匹配回车\\n,如/a.*art/s匹配"I am \\nsmart"
【x】忽略正则表达式内容里所写的空白间隔,去掉空字符而已
【U】取消开始和结束符以最大范围取值,如"awobaisb"使用"/a.*b/"输出awobaisb
使用/a.*b/U或/a.*?b/取消贪婪则会输出:awob和aisb
5、 替换内容1:preg_replace($正则字符串,“替换值”,$原字符串);//返回替换后的字符串
正则字符串:/\\Aaa.*wo$/ 如"aadongwo"
可在替换值中用\\1或者$1直接取第一个值(dong)
6、 替换内容2:
7、 分割内容:preg_split($正则字符串,$原字符串);//以正则字符串为分割符,返回数组
正则字符串如:"/[.,?na]/"表示可以以点、逗号、问好、字母n、字母a作为分隔符
8、 获取匹配值:preg_match_all($正则字符串,$原字符串,$返回结果数组);
//查找无则返回失败(false),成功则结果存在$返回结果数组
//preg_match()获取一次,参数相同
9、 获取数组匹配值:preg_grep($正则字符串,$原字符串数组);//返回匹配上的新字符串数组
以上是关于python 正则表达式 匹配成对出现的词 的问题的主要内容,如果未能解决你的问题,请参考以下文章