Python中字符的匹配

今天我们来聊一下Python中字符的匹配。所谓匹配字符串,即按指定规则提取数据,主要用于爬虫和数据清洗。我们用代码加注释的形式来阐述这一部分内容,为此有必要针对下文做几点说明:

1.下文代码均编写在同一个.py文件中

2.下文中橘黄色标注的为代码,其余为注释

3.为了方便读者阅读,我们将下文涉及的字符匹配的操作罗列如下,读者可根据编号在下述代码中查找相关内容,选择想要阅读的部分:

1.直接字符串匹配  2.任意字匹配  3.范围匹配  4.数字匹配\d  5.非数字匹配

6.字母\w(汉字,字母,数字)   7.非字母\W  8.匹配空格\s   9.匹配非空格\S  10.*匹配

11.+匹配  12.?一次匹配  13.{}按照指定个数或范围进行匹配  14.匹配指定开头和结尾  

15.不在范围内匹配   16.获取分组数据匹配  17.指定多个固定的匹配规格  

18.给分组数据指定变量名称  19.分组规则的重复使用,获取标签数据

 

 

#代码部分

import re

# 使用re.match进行正则的编写和数据提取

# 第一个参数,编写正则表达式,编写数据匹配规则

# 第二个参数,要匹配的字符串数据

# 需要有接受值接收返回结果

# 1.直接字符串匹配

r = re.match('ti', 'it')

try:

    data = r.group()

except:

    print('未匹配到数据')

else:

    print(data)

# 从结果中获取匹配的数据 r.group() ,可以定义变量接收数据,未匹配到数据则报错

# 注意:正则的匹配顺序是从第一个字符开始匹配,

# 如果第一个字符未匹配,则报错('t' != 'i'),

# 直接字符串匹配时,根据第一个参数的全部内容进行匹配,即从如果匹配成功,匹配的结果就是第一个参数

 

 

# 2.任意字匹配

r = re.match('....', '北京.D')

data = r.group()

print(data)

结果为 北京.D

 

 

# 3.范围匹配

r = re.match('[ads]', 'dhamsn')

data = r.group()

print(data)

# 结果为d,说明是将参数二中的字符拿来一一匹配

r = re.match('[ads][dhs][had]', 'dhamsn')

data = r.group()

print(data)

# 结果为dha

r = re.match('[a-z0-9A-Z][a-z0-9A-Z][a-z0-9A-Z]', 'sF0qg')

data = r.group()

print(data)

# 结果为sF0

 

 

# 4.数字匹配\d

r = re.match('\d\d', '89ih')

data = r.group()

print(data)

# 结果为68

 

 

# 5.非数字匹配

r = re.match('\D', 'h#j')

data = r.group()

print(data)

 

 

# 6.字母\w(汉字,字母,数字)

r = re.match('\w', '天di')

data = r.type()

print(data)

 

 

# 7.非字母\W

r = re.match('\W', '$10')

data = r.group()

print(data)

 

 

# 8.匹配空格\s

r = re.match('\s', ' as')

data = r.group()

print(data)

 

 

# 9.匹配非空格\S

r = re.match('\S', '&Gg2')

data = r.group()

print(data)

 

 

#多字符匹配

# 10.*匹配,可以匹配0至多个字符,若匹配0个,则返回空

r = re.match('\d*', 'yeasterday')

data = r.group()

print(data)

# 返回为空,不会报错

r = re.match('\w*', 'fda677sa##$')

data = r.group()

print(data)

# 结果为fda677sa

# '.*'全匹配

 

 

# 11.+可以匹配一个或多个,若匹配不到会报错

r = re.match('\d+', 'gerg46')

data = r.group()

print(data)

 

 

# 12.?进行一次匹配,匹配失败返回空值

r = re.match('\d?', 'asd7')

data = r.group()

print(data)

 

 

# 13.{}按照指定个数或范围进行匹配({m,n}匹配m到n位)

r = re.match('\w{2}', 'gerg46')

data = r.group()

print(data)

# 结果为ge

r = re.match('\w{2,4}', 'ger$g46')

data = r.group()

print(data)

# 结果为ger

 

 

# 14.匹配指定开头和结尾

# ^匹配开头

r = re.match('^\w+', 'ger$g46')

data = r.group()

print(data)

# 结果为ger

# $匹配结尾

r = re.match('\w+\W+$', 'ger$@')

data = r.group()

print(data)

# 结果为ger$@

 

 

 

# 15.不在范围内匹配

r = re.match('[^iknh]', 'ger$g46')

data = r.group()

print(data)

# 结果为g

 

 

# 16.获取分组数据,将数据拆分为多个部分,分别取出对应的值

# 邮箱匹配,用户名@服务名.com,分别取出用户名,服务名

r = re.match('(\w+)@(\w+).com','[email protected]')

data = r.group(2)

print(data)

# 结果为qq,可见分组可以取出match方法内层括号里的内容,

# group(0)会取出包括内层括号外的所有内容,即[email protected]

 

 

# 17.指定多个固定的匹配规格

r = re.match('(\w+)@(163|qq|sina|google).com', '[email protected]')

data = r.group(2)

print(data)

# (163|qq|sina|google|hrbeu)指定了匹配的规格,不在此规格内则报错

 

 

# 18.给分组数据指定变量名称?P<变量名>

r=re.match('(?P\w+)@(?P163|qq|sina|google).com', '[email protected]')

data = r.group('user_name')

print(data)

# 运行结果my.

 

 

# 19.分组规则的重复使用,取标签数据

# r = re.match('<(.+)>.*<(/\\1)>', 'tryagain')

r = re.match('<(?P.+)>.*', 'tryagain')

data = r.group()

print(data)

# 运行结果为 tryagain

你可能感兴趣的:(编程语言,python,字符串,正则表达式)