import re
string="我正在学习python3的正则表达式,现在的日期是2019-01-22"
result=re.split(r',',string)[1]
print(result)
result=re.findall(r'(\d+.\d+.\d+)',string)
print(result)
result=re.findall(r'([0-9]+.[0-9]+.[0-9]+)',string)
print(result)
result=re.findall(r'[a-zA-Z]+',string)
print(result)
result=re.findall(r'\d{2,4}',string)
print(result)
"""
打印结果:
现在的日期是2019-01-22
['2019-01-22']
['2019-01-22']
['python']
['2019', '01', '22']
"""
import re
from lxmlimport etree
#第一部分 re.match re.search re.findall 使用区别
print("第一部分 re.match re.search re.findall 使用区别")
"""
re.match #从开始位置开始匹配,如果开头没有则无re.search #搜索整个字符串re.findall #搜索整个字符串,返回一个list
"""
s1 ='liuyaNLonG15374abccc8888'
print("s1为:",s1)
#会成为一个列表
result=re.findall(r'[\d]+',s1)
print("使用findall匹配结果:",result)
result=re.match(r'[\d]+',s1)
print("使用match匹配结果:",result)
result=re.search(r'[\d]+',s1).group()
print("使用search匹配结果:",result)
"""
s1为:liuyaNLonG15374abccc8888
使用findall匹配结果: ['15374', '8888']
使用match匹配结果: None
使用search匹配结果: 15374
"""
print("第二部分 .* .*? .+ .+? 匹配所有内容 一行匹配的使用区别")
#第二部分 .* .*? .+ .+? 区别 , .*? .+?表示匹配任意字符并且尽可能少
"""
特别说明:
限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配
有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种限定符。* 和 + 限定符都是贪婪的,因为它们会尽可能多的匹配文字,只有在它们的后面加上一个 ? 就可以实现非贪婪表达式或最小匹配。"""
s2 ='liuyaNLonG15374abcccc8888'
print("s2为:",s2)
sss=re.findall(r'LonG(.*)c',s2)
print(".*匹配结果:",sss)
sss=re.findall(r'LonG(.*?)c',s2)
print(".*?匹配结果:",sss)
sss=re.findall(r'LonG(.+)c',s2)
print(".+匹配结果:",sss)
sss=re.findall(r'LonG(.+?)c',s2)
print(".+?匹配结果:",sss)
"""
.*匹配结果:['15374abccc']
.*?匹配结果:['15374ab']
.+匹配结果:['15374abccc']
.+?匹配结果:['15374ab']
"""
print("第三部分 .* .*? .+ .+? 匹配所有内容 多行匹配的使用区别")
#第三部分 .* .*? .+ .+? 多行匹配的使用区别 .*? .+?使用时,最好.*? .+?的前后都要有条件限定
s3 ='''first line
second line
third line
'''
print("s3为:",s3)
sss=re.findall(r'(.*)',s3)
print(".*匹配结果:",sss)
sss=re.findall(r'(.*?)',s3)
print(".*?匹配结果:",sss)
sss=re.findall(r'(.*?)\n',s3)
print(".*?的后端有限制条件时,匹配结果:",sss)
sss=re.findall(r'(.+)',s3)
print(".+匹配结果:",sss)
sss=re.findall(r'(.+?)',s3)
print(".+?匹配结果:",sss)
sss=re.findall(r'(.+?)\n',s3)
print(".+?的后端有限制条件时,匹配结果:",sss)
"""
.*匹配结果:['first line', '', 'second line', '', 'third line', '', '']
.*?匹配结果:['', 'f', '', 'i', '', 'r', '', 's', '', 't', '', ' ', '', 'l', '', 'i', '', 'n', '', 'e', '', '', 's', '', 'e', '', 'c', '', 'o', '', 'n', '', 'd', '', ' ', '', 'l', '', 'i', '', 'n', '', 'e', '', '', 't', '', 'h', '', 'i', '', 'r', '', 'd', '', ' ', '', 'l', '', 'i', '', 'n', '', 'e', '', '']
.*?的后端有限制条件时,匹配结果:['first line', 'second line', 'third line']
.+匹配结果:['first line', 'second line', 'third line']
.+?匹配结果:['f', 'i', 'r', 's', 't', ' ', 'l', 'i', 'n', 'e', 's', 'e', 'c', 'o', 'n', 'd', ' ', 'l', 'i', 'n', 'e', 't', 'h', 'i', 'r', 'd', ' ', 'l', 'i', 'n', 'e']
.+?的后端有限制条件时,匹配结果:['first line', 'second line', 'third line']
"""
s4="abc12345664643444ttt"
#匹配数字,只能匹配4个数字,不够4个的数字去掉
ru=re.findall(r'\d{4}',s4)
print(ru)
#匹配数字,匹配2到4个数字,但是优先匹配4个数字,
ru=re.findall(r'\d{1,4}',s4)
print(ru)
s5="abababababababab"
sss=re.findall(r'ab+',s5)
print("+匹配结果1:",sss)
s5="aaaaaaaaaaaaaaaa"
sss=re.findall(r'a+?',s5)
print("+匹配结果2:",sss)
s5="abababababababab"
sss=re.findall(r'ab*',s5)
print("*匹配结果1:",sss)
s5="aaaaaaaaaaaaaaaa"
sss=re.findall(r'a*?',s5)
print("*匹配结果2:",sss)
aaa="我12345+abcde"
sss=re.findall(r'(.*)\+(.*)',aaa)[0]
print("\匹配结果:",sss[-1])
#以某个字符串或者字符为开头
bbb='hello 111 world'
sss=re.findall(r'^he',bbb)
print("^匹配结果:",sss)
#以某个字符串或者字符为开头
bbb='hello 11 11world'
sss=re.findall(r'rld$',bbb)
print("$匹配结果:",sss)
#切割re.split(pattern, string[, maxsplit])按照能够匹配的子串将string分割后返回列表。
sur=re.split(r'\+',aaa)
print("split匹配结果:",sur)