Python:正则表达式

# 正则表达式
import re

# 指定内容匹配
text = '我来自遥远的艾泽拉斯,我是矮人一族,是一个射手,it is my honour,i am proud of it!,height115s,weight130s!'
v1 = re.findall('我',text)
print(v1)  # ['我', '我']

# 多个相关内容匹配
v2 = re.findall('[我艾是]',text)  # 匹配”我“、”艾“、”是“
print(v2)  # ['我', '艾', '我', '是', '是']

v3 = re.findall('o[nu]',text) # 匹配on和ou
print(v3)  # ['on', 'ou', 'ou']

v4 = re.findall('[^我是omt]',text)  # 匹配除了我、是、o、m、t以外的所有内容
print(v4)  #['来', '自', '遥', '远', '的', '艾', '泽', '拉', '斯', ',', '矮', '人', '一', '族', ',', '一', '个', '射',
# '手', ',', 'i', ' ', 'i', 's', ' ', 'y', ' ', 'h', 'n', 'u', 'r', ',', 'i', ' ', 'a', ' ', 'p', 'r', 'u', 'd',
# ' ', 'f', ' ', 'i', '!', ',', 'h', 'e', 'i', 'g', 'h', '1', '1', '5', 's', ',', 'w', 'e', 'i', 'g', 'h', '1', '3',
# '0', 's', '!']

v5 = re.findall('h[a-z]',text)  # 匹配h和a-z在内的所有英文字母连接的内容
print(v5)  # ['ho', 'he', 'ht', 'ht']

v6 = re.findall('t[0-9]',text)  # 匹配t和所有0-9之间的数字连接的内容
print(v6)  # ['t1', 't1']

# .代指除了换行符以外的任意字符
v7 = re.findall('h.1',text)  # ·代表一个字符
print(v7)  # ['ht1', 'ht1']

v8 = re.findall('h.+1',text)  # 贪婪匹配:从第一个h开始到最后一个i结束的所有内容
print(v8)  # ['honour,i am proud of it!,height115s,weight1']

v9 = re.findall('h.+?1',text)  # 非贪婪匹配:所有h到1之间的内容
print(v9)  # ['honour,i am proud of it!,height1', 'ht1']

# \w代指数字或字母或下划线或中文,遵循贪婪匹配原则
v10 = re.findall('h\w+i',text)
print(v10)  # ['hei']
v11 = re.findall('我\w+一',text)
print(v11)  # ['我是矮人一']
v16 = re.findall('我\w',text)
print(v16)  # ['我来', '我是']

# \d代指数字
v12 = re.findall('t\d+s',text)
print(v12)  # ['t115s', 't130s']
v13 = re.findall('t\d',text)
print(v13)  # ['t1', 't1']
v14 = re.findall('t\d+',text)
print(v14)  # ['t115', 't130']

# \s代指任意的空白符,包括空格、制表符等
v15 = re.findall('i\w+\s+\ws',text)
print(v15)  # ['it is']

text01 = '他是个大人,是个大好人,是个大好好人,是个大好好好人'
v16 = re.findall("大好*人",text01)  # 好出现0次或者n次
print(v16)  # ['大人', '大好人', '大好好人', '大好好好人']

text02 = '他有钱,有很多钱,有很多很多的gold_钱'
v17 = re.findall('有\w+钱',text02)  # 数字或字母或下划线或中文出现1次或很多次
print(v17)  # ['有很多钱', '有很多很多的gold_钱']

text03 = '他是人,他是好人,是个大好人'
v18 = re.findall('是\w?人',text03)  # 数字或字母或下划线或中文重复0次或1次
print(v18)  # ['是人', '是好人']

text04 = '1287329873929287398'
v19 = re.findall('732\d{4}',text04)  # 732后的数字重复出现4次
print(v19)  # ['7329873']

text05 = '23199,2310102,231299384,2319994483874'
v20 = re.findall('231\d{4,}',text05)  # 231后面的数字重复出现4次及以上次数
print(v20)  # ['2310102', '231299384', '2319994483874']

text06 = '我的手机号是15188889999,他的电话是00008888,他的邮编是317021'
v21 = re.findall('\d{8,11}',text06)  # 数字重复出现8到11次
print(v21)  # ['15188889999', '00008888']

text07 = '我的手机号是1511234567,他的电话是0123456789,他的邮编是317021'
v22 = re.findall('123(\d{1,5})',text07)  # 提取123后面出现的1-5位数字
print(v22)  # ['4567', '45678']
v23 = re.findall('123(4)5(6\d{1,2})',text07)  # 提取4和6及6后面出现的1-2位数字
print(v23)  # [('4', '67'), ('4', '678')]
v24 = re.findall('(123(4)5(6\d{1,2}))',text07)  # 提取123456及后面的1-2位数、4、6及6后面出现的1-2位数字
print(v24)  # [('1234567', '4', '67'), ('12345678', '4', '678')]

text08 = '你是个大人才,真是太666了啊,厉害'
v25 = re.findall('(你是个(\w{3})|(\d+\w))',text08)  # |:或者的意思,提取你是个后面三个字符或者数字+后面的一个字符
print(v25)  # [('你是个大人才', '大人才', ''), ('666了', '', '666了')]
上一篇:Selenium IDE 基础教程


下一篇:正则表达式入门-findall()函数