关于findall

关于findall

比如:

a = re.compile('aa(\d*)b')

b = a.findall('aa233bad43')
print(b)

返回结果为['233']

为什么只返回分组内的结果列表,而不是['aa233b']

还有请问为什么compile里加r和不加r结果一样,r的作用不是说是使用原字符串,不用对特殊字符转移,那为啥r'\d'不是去匹配\d这俩字符,也去匹配数字

正在回答

登陆购买课程后可参与讨论,去登陆

3回答

我试着回答一下吧,

1、先说为什么要加r:正则表达式中使用“\”作为转义字符,如果需要匹配文本中的字符“\”,在正则表达式中需要4个“\”,首先,前2个“\”和后两个“\”在python解释器中分别转义成一个“\”,然后转义后的2个“\”在正则中被转义成一个“\”。

2、findall()返回的是括号所匹配到的结果,多个括号就会返回多个括号分别匹配到的结果, 如果没有括号就返回就返回整条语句所匹配到的结果。 这个特性是正则表达式特有的,而不仅仅只是python语言。

程序如下修改就可以获得你想要的结果,多个括号的问题可以自己再试试:

import re

a=re.compile(r'aa\d*b')
b=a.findall('aa233bad43')
print(b)

好帮手慕美 2020-01-23 13:45:40

同学,你好。'r表示原始字符串匹配,防止字符串被转义。要想输出"\"则在输出时需要使用"\\"输出。可以理解为r是将"\"取消转义,表示反斜杠。

如下图例子:

1)\反斜杠是转义字符,在匹配特殊字符时需要进行转义,\\表示匹配反斜杠符号,路径中的双斜杠都要进行转义。即为c:\\\\a

http://img1.sycdn.imooc.com//climg/5e293241096837d903400290.jpg

2)加r表示原始字符串匹配( 加r可以减少使用\对正则表达式转义的次数)

http://img1.sycdn.imooc.com//climg/5e29326b0922de2e03340287.jpg

如果我的回答解决了您的疑惑,欢迎采纳!!祝学习愉快~~~~

好帮手慕美 2020-01-23 11:58:12

同学,你好。可以参考"彭旭东"小伙伴的回答。正则中的'\d'表示匹配数字,即0-9。祝学习愉快~~~~


  • 提问者 慕沐2042916 #1
    python解释器里字符串中想打‘’\‘’都需要先转义一遍是吧?那加上r是省去了哪一步转义?
    2020-01-23 12:30:52
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
1.Python零基础入门
  • 参与学习           人
  • 提交作业       2727    份
  • 解答问题       8160    个

想要进入Python Web、爬虫、人工智能等高薪领域,你需要掌握本阶段的Python基础知识,课程安排带你高效学习轻松入门,学完你也能听得懂Python工程师的行业梗。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师