正则表达式
import re
print(re.match('abc','abca'))
前面匹配后面,如果成功则返回位置
<_sre.SRE_Match object; span=(0, 3), match='abc'>
否则返回None
print(re.match('abc','abxca'))
None
a=re.match('abc','abca')
print(a.group(0))
挖掘的第一个匹配
a='thie is a girl sdf sd fsda a w'
a=re.match(r'(.*)is(.*)a(.*)',a)
print(a.group(0)) #也等于group()
print(a.group(1))
print(a.group(2))
print(a.group(3))
后面group的数字分别对应全部、各自()的位置
预编译 起到加速作用
import re
pat=re.compile("(.*)----(.*)",re.IGNORECASE) #忽略异常情况
line="dfdsafsadf----21342314234fdsfg"
mat=pat.match(line)
print(mat.group())
print(mat.group(0))
print(mat.group(1))
print(mat.group(2))
dfdsafsadf----21342314234fdsfg
dfdsafsadf----21342314234fdsfg
dfdsafsadf
21342314234fdsfg
搜索
re.search(a,b) 在b里搜索a
只要包含就可以 而match是从第一个开始
[1-9]\\d{4,10} 第一个字符是1-9的,\\d表示整数 {}表示匹配4-10位个整数
去掉任意字符的空格
import re
line="123123 123df d sa fs adf-- --213 42 314 2 34fd s fg"
mylist=re.split('\\s+',line)
print(mylist)
re.split(r'[\s\,\;]',line1) #三个符号选一个
finditer功能
mylist=re.finditer('[^123]',line) #找出除了123的字符
mylist=re.finditer('[123]',line) #找出123(不是连续的)
for i in mylist:
print(i.group())
替换功能subn
mylist=re.subn('123','',line) #删除
mylist=re.subn('123','321',line) #替换
print(mylist[0]) #替换结果
print(mylist[1]) #替换的次数
sub没有次数统计,直接打印
print(mylist)
正则表达式的含义
. 除了换行符\n的任意字符
\转义字符 间接\r \n \t
\d 数字
\D 非数字
\s 空白字符 空格 \t
\S 非空白字符
\w 单词字符,大小写字母数字
\W 非单词字符
[abc] abc中取一个,第一个字符的范围
[^abc] 第一个字符不是abc
[0-9]数字
[^0-9]非数字
[a-zA-Z0-8] A-Z a-z 0-8之间的一个字符
后面加了,re.IGNORECASE 忽略异常和大小写 所以[a-z]==[A-Za-z]
* 表示>=0次
. 任意字符
+ >0次
? 0或1次
{2} 两次
{1,3} 1-3次
非括号中
^string \Astring 以string开头
string$ string\Z 结尾
re.match(r'\bstring',mylist)
\bstring 表示匹配字符串
r'the\b','mythe' 不能
r'the\b','mytheit' 可以
\B与\b相反
'abs|xyz' |表示或
abc{2,4} 匹配c2-4次
(abc){2,4} 匹配abc2-4次
正则表达式的特殊模式
r'((?:)abc){2}','abcabc' ##(?:) 无意义
r'((?i)abc){2}','abcAbc' ##忽略大小写
r'(abc(?#注释)){2}','abc,abc' ## 表示(?#注释)
r'(a(?=1bc)){2}','a1bc' ##a后面必须=1bc才能匹配a
r'(a(?!1bc)){2}','a1bc' ##a后面必须不是1bc才能匹配a
r'((?<=bc)a){2}','bca' ##a前面必须是bc才能匹配a
r'((?<!bc)a){2}','bca' ##a前面必须不是bc才能匹配a
正则表达式默认贪婪
import re
print(re.match(r'^(\d+)(0*)$','13424123450000000').groups())
print(re.match(r'^(\d+?)(0*)$','13424123450000000').groups())
('13424123450000000', '')
('1342412345', '0000000')
加入问号会分割0