010、【byhy】 常见语法—— 起始 ^、结尾 $ 位置 和 单行、多行模式

 

 

一、 常见语法——  起始、结尾位置 和 单行、多行模式

 

 

^ 表示匹配文本的 开头 位置。

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

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

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

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

001-苹果价格-60002-橙子价格-70,
003-香蕉价格-80,

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

上面的正则表达式,使用在Python程序里面,如下所示

import re

content = '''001-苹果价格-60
002-橙子价格-70
003-香蕉价格-80'''

# re.M 表示多行模式,不加的话默认是单行模式
p = re.compile(r'^\d+', re.M)
for one in p.findall(content):
    print(one)

print('=====单行模式======')
content = '''001-苹果价格-60
002-橙子价格-70
003-香蕉价格-80'''

# 不加的话默认是单行模式
p1 = re.compile(r'^\d+')
for one in p1.findall(content):
    print(one)

执行结果如下:

001
002
003
=====单行模式======
001

Process finished with exit code 0

因为单行模式下,^ 只会匹配整个文本的开头位置。

 

$ 表示匹配文本的 结尾 位置。

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

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

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

001-苹果价格-60,
002-橙子价格-70,
003-香蕉价格-80,

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

 

对应代码

import re

content = '''001-苹果价格-60,
002-橙子价格-70,
003-香蕉价格-80,
'''

p = re.compile(r'\d+,$', re.MULTILINE)
for one in p.findall(content):
    print(one)

注意,compile 的第二个参数 re.MULTILINE ,指明了使用多行模式,

运行结果如下:

60,
70,
80,

Process finished with exit code 0

如果,去掉 compile 的第二个参数 re.MULTILINE:

import re

content = '''001-苹果价格-60,
002-橙子价格-70,
003-香蕉价格-80,
'''
print('=======多行模式=========')

p = re.compile(r'\d+,$', re.MULTILINE)
for one in p.findall(content):
    print(one)

print('=======单行模式=========')

p1 = re.compile(r'\d+,$')
for one in p1.findall(content):
    print(one)

运行结果如下:

=======多行模式=========
60,
70,
80,
=======单行模式=========
80,

Process finished with exit code 0

 

posted @ 2021-09-08 13:56  空-山-新-雨  阅读(499)  评论(0编辑  收藏  举报