起始位置 和单行,多行模式
^表示匹配文本的起始位置。
正则表达式可以设定单行模式和多行模式
如果是单行模式,表示匹配整个文本的开头位置
如果是多行模式,表示匹配文本每行的开头位置

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

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\')

\'\'\'

  

版权声明:本文为wxcx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/wxcx/p/12653783.html