Python_正则表达式提取字符串
1、指定位置字符串提取
如果要提取指定位置的话,我们可以使⽤ (.+?)这个正则表达式来提取。举例:⼀个字符串“a123456789b”,如果我们想提取ab之间的数字,可以使⽤ findall 配合正则表达式,会返回list。
import re
String ="a123456789b"
regular = re.findall(r"a(.+?)b", String)
print(regular)
print(regular[0])
结果:
['123456789']
python正则表达式不包含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']
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论