Python 正则re模块之findall()详解

1. 先说一下findall()函数的两种表示形式
import re
kk = re.compile(r'\d+')
kk.findall('one1two2three3four4')
#[1,2,3,4]

#注意此处findall()的用法,可传两个参数;
kk = re.compile(r'\d+')
re.findall(kk,"one123")
#[1,2,3]
2. 正则表达式可能遇到的坑  --- 正则表达式中有括号()
1. 正则表达式中当没有括号时,就是正常匹配,在本例中"/w+/s+/w+"第一次匹配到的字符为"2345  3456",由于是贪婪模式会     继续匹配,第二次从"4567"开始匹配匹配到的结果为字符串"4567 5678"

import re
string="2345  3456  4567  5678"
regex=re.compile("\w+\s+\w+")
print(regex.findall(string))
#['2345 3456', '4567 5678']
  !!!  首先的知道各个字符所表达的含义,这里只说一下/s 和 /S
       \s -- 匹配任何不可见字符,包括空格、制表符、换页符等等 
      \S -- 匹配任何可见字符   通常[/s/S] -- 可匹配任意字符
      [\s\S]*? -- 匹配懒惰模式的任意字符

2. 正则表达式中有一个括号时,其输出的内容就是括号匹配到的内容,而不是整个表达式所匹配到的结果,但是整个正则表达式执       行了只不过只输出括号匹配到的内容, 在第一次匹配时跟上述没有括号时一样,匹配到 "2345  3456" ,只不过只输出(/w+)匹配     到的结果 即"2345",第二次匹配同理从"4567" 开始,匹配到"4567  5678",但是还是只是输出"4567"

import re
string="2345  3456  4567  5678"
regex=re.compile("(\w+)\s+\w+")
print(regex.findall(string))
#['2345', '4567']
3. 当正则表达式中有两个括号时,其输出是一个list 中包含2个 tuple,从输出的结果可以看出,有两个元组,每一个元组中有两       个字符串 : 其中第一个字符串"2345 3456"是最外面的括号输出的结果,第二个是里面括号(/w+)输出的结果 "2345", 第二个       元组是  第二次匹配的结果 -- 详解同第一次匹配。

import re
string="2345  3456  4567  5678"
regex=re.compile("((\w+)\s+\w+)")
print(regex.findall(string))
#[('2345  3456', '2345'), ('4567  5678', '4567')]

希望对大家有帮助!!  远离大坑



  • 55
    点赞
  • 158
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 25
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 25
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qin147896325

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值