python正则表达式详解

正则表达式
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'((?


正则表达式默认贪婪
import re
print(re.match(r'^(\d+)(0*)$','13424123450000000').groups())
print(re.match(r'^(\d+?)(0*)$','13424123450000000').groups())

('13424123450000000', '')
('1342412345', '0000000')
加入问号会分割0


 

你可能感兴趣的:(Python基础)