Python_正则表达式提取字符串

1、指定位置字符串提取

如果要提取指定位置的话,我们可以使用 (.+?)这个正则表达式来提取。举例:一个字符串“a123456789b”,如果我们想提取ab之间的数字,可以使用 findall 配合正则表达式,会返回list。

import re

String = "a123456789b"
regular = re.findall(r"a(.+?)b", String)
print(regular)
print(regular[0])

结果:
['123456789']
123456789

2、贪婪和非贪婪匹配

如果我们有一个字符串”a123b456789b”,如果我们想匹配a和最后一个b之间的所有值而非a和第一个出现的b之间的值,可以用 ? 来控制正则贪婪和非贪婪匹配的情况。

import re

String = "a123b456789b"
# . 匹配任意字符,除了换行符
# + 匹配1个或多个的表达式
# ? 匹配0个或1个由前面的正则表达式定义的片段,非贪婪方式

regular = re.findall(r"a(.+?)b", String)
print(regular)

regular = re.findall(r"a(.+)b", String)
# 输出['123b456']
print(regular)

结果:
['123']
['123b456789']

3、多行匹配

如果你要多行匹配,那么需要加上re.S和re.M标志

# 加上re.S后, .将会匹配换行符,默认.不会匹配换行符
import re

String = "a123b\na456789b"
# \d 匹配任意数字,等价于 [0-9]
# re.S 使 . 匹配包括换行在内的所有字符
# re.M 多行匹配,影响 ^ 和 $

regular = re.findall(r"a(\d+)b.+a(\d+)b", String)
print(regular)

regular = re.findall(r"a(\d+)b(.)a(\d+)b", String, re.S)
print(regular)

regular = re.findall(r"a(\d+)b.a(\d+)b", String, re.S)
print(regular)

结果:
[]
[('123', '\n', '456789')]
[('123', '456789')]

# 加上re.M后,^$标志将会匹配每一行,默认^和$只会匹配第一行
import re

String = "a123b\na456789b"
# ^ 匹配字符串的开头
# $ 匹配字符串的末尾

regular = re.findall(r"^a(\d+)b", String)
print(regular)

regular = re.findall(r"^a(\d+)b", String, re.M)
print(regular)

结果:
['123']
['123', '456789']
  • 11
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值