python正则表达式r_python正则表达式(^ $ ( ) )(四)

起始位置 和单行,多行模式

^表示匹配文本的起始位置。

正则表达式可以设定单行模式和多行模式

如果是单行模式,表示匹配整个文本的开头位置

如果是多行模式,表示匹配文本每行的开头位置

比如,下面的文本中,每行最前面的数字表示水果的编号,最后的数字表示价格

001-苹果价格-60,

002-橙子价格-70,

003-香蕉价格-80,

如果我们要提取所有的水果编号,用这样的正则表达式 ^\d+

用python代码展示单行模式:

content='''001-苹果价格-60,

002-橙子价格-70,

003-香蕉价格-80,'''

import re

p=re.compile(r'^\d+')

for one in p.findall(content):

print(one)

'''

输出结果:001

'''

默认为单行模式,所以只输入001

用python代码展示多行模式:

content='''001-苹果价格-60,

002-橙子价格-70,

003-香蕉价格-80,'''

import re

p=re.compile(r'^\d+',re.M)

for one in p.findall(content):

print(one)

'''

输出结果:

001

002

003

'''

注意:compile的第二个参数re.M,指明了使用多行模式,若不加re.M,表示单行模式,^只会匹配整个文本的开头位置

$表示匹配文本的结束位置

如果是单行模式,表示匹配整个文本的结束位置

如果是多行模式,表示匹配文本每行的结束位置

比如,下面的文本中,每行最前面的数字表示水果的编号,最后的数字表示价格

001-苹果价格-60

002-橙子价格-70

003-香蕉价格-80

如果我们要提取所有的水果价格,用这样的正则表达式 ^\d+$

用python代码展示单行模式:

content='''001-苹果价格-60

002-橙子价格-70

003-香蕉价格-80'''

import re

p=re.compile(r'\d+$')

for one in p.findall(content):

print(one)

'''

输出结果:

80

'''

用python代码展示多行模式:

content='''001-苹果价格-60

002-橙子价格-70

003-香蕉价格-80'''

import re

p=re.compile(r'\d+$',re.M)

for one in p.findall(content):

print(one)

'''

输出结果:

60

70

80

'''

括号-组选择

括号称之为 正则表达式的组选择,是从正则表达式匹配的内容里面扣取出其中的某些部分

前面,我们有个例子,从下面的文本中,选中每行逗号前面的字符串,也包括逗号本身

苹果,苹果是绿色的

橙子,橙子是橙色的

香蕉,香蕉是黄色的

就可以这样写正则表达式 ^.*,

但是,如果我们要求不要包括逗号呢?

当然不能直接这样写 ^.*

因为最后的逗号是特征所在,如果去掉它,就没法找逗号前面的了。

但是把逗号放在正则表达式中,又会包含逗号

解决问题的方法就是使用组选择符:括号

我们这样写 ^(.*),  ,结果如下

我们把要从整个表达式中提取的部分放在括号中,这样水果的名字就被单独的放在 组group中了

对应的python代码如下:

content='''苹果,苹果是绿色的

橙子,橙子是橙色的

香蕉,香蕉是黄色的

'''

import re

p=re.compile(r'^(.*),',re.MULTILINE)

for one in p.findall(content):

print(one)

'''

输出结果:

苹果

橙子

香蕉

'''

python代码实现:

content='''苹果,苹果是绿色的

橙子,橙子是橙色的

香蕉,香蕉是黄色的

'''

import re

p=re.compile(r'^(.*)(,)',re.MULTILINE)

for one in p.findall(content):

print(one)

'''

输出结果:

('苹果', ',')

('橙子', ',')

('香蕉', ',')

'''

python代码实现:

content='''张三,手机号码15945678901

李四,手机号码13945677701

王二,手机号码13845666901

'''

import re

p=re.compile(r'^(.+),.+(\d{11})',re.MULTILINE)

for one in p.findall(content):

print(one)

'''

输出结果:

('张三', '15945678901')

('李四', '13945677701')

('王二', '13845666901')

'''

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值