import re
正则表达式的常用操作符
. :表示任何单个字符
[] :字符集,对单个字符给出取值范围 [abc]表示a,,b,c[a-z]表示a到z的单个字符
[^] :非字符集,对单个字符给出排除范围 [^abc]表示非a或b或c的单个字符
* :前一个字符扩展0次或无限次
+ :前一个字符扩展1次或无限次
? :前一个字符0次或1次拓展
| :左右表达式中的任意一个
{m} :拓展前一个字符m次
{m,n} :拓展前一个字符m至n
^ 匹配字符串开头 ^abc表示abc在一个字符串的开头
$ 匹配字符串结尾 abc$表示abc在一个字符串的结尾
() 分组标记
\d 数字,等价于【0-9】
\w 单个字符,等价于[A-Za-z0-9]
举例:
PY【^TH】?ON 'PYON'. 'PYAON.......
^[A-Za-z]+$ 26个字符串组成的正则表达式
^-?\d+$ 整数形式的字符串
\d{3}-\d{8}|\d{4}-\d{7}
正则表达式的常用函数
re.search() #在一个字符串中匹配正则表达式的第一个位置
re.match() #从一个字符串的开始位置起匹配正则表达式,返回match对象
re.findall() #搜索字符串,以列表类型返回全部能匹配的字符串
re.split() #将一个字符串按照正则表达式结果进行分割,返回列表类型
re.finditer() #搜索字符串,返回一个匹配结果的迭代类型 每个迭代元素是match对象
re.sub() # 在一个字符串中替换所有匹配正则表达式的子串,返回替换后字符串
re.search(pattern ,string,flags=0)
pattern:正则表达式的字符串
string :待匹配的字符串
flag: 正则表达式使用时的控制标记
flag:正则表达式使用时的控制标记
re.I re.IGNORECASE :忽略正则表达式的大小写
re.M re.MULTILINE : 正则表达式中的操作符能够将给定字符串的每行当做匹配的开始
re.split(pattern,string,maxsplit=0,flag=0)
pattern:正则表达式的字符串
string:待匹配字符串
maxsplit:最大分割数
flag :正则表达式使用时的控制标记
re.sub(pattern,repl,string,count=0,flags=0)
patter:正则表达式的字符串
repl:替换匹配字符串的字符串
string:待匹配字符串
举例:
import re
match=re.search(r'[1-9]\d{5}','BIT 100081')
if match:
print(match.goup(0))
import re
match=re.match(r'[1-9]\d{5}','100081 BIt')
if match:
match.group(0)
import re
ls=re.findall(r'[1-9\d{5}]','BIT100081 TSU100084')
ls
import re
re.split(r'[1-9]\d{5}','BIT1000081,TSU100084'maxsplit=2)
import re
for m in re.finditer(r'[1-9]\d{5}','BIT100081 TSU100084'):
if m:
print(m.group(0))
import re
re.sub(r'[1-9]\d{5}',':zipcode','BIT100081 TSU100081')
re库的两种用法
rst=re.search(r'[1-9]\d{5}','BIT100081')
以上的方法是函数式调用
面向对象用法,编译后多次操作
pat=re.compile(r'[1-9]\d{5}')
rst=pat.search('BIT100081')
regex=re.compile(pattern,flag=0)
将正则表达式的字符串形式编译成正则表达式对象
re库默认采用贪婪匹配,即输出匹配最长的子串
match=re.search(r'PY.*N','PYANBNCNDN')
match.group(0)
输出:PYANBNCNDN
最小匹配
match=re.search(r'PY.*?N','PYANBNCNDN')
match.group(0)
输出 PYAN
最小匹配操作符
*? 前一个字符0次或无限次的拓展,最小匹配
+? 前一个字符1次或无限次拓展 最小匹配
?? 前一个字符0次或1次拓展,最小匹配
(m,n)? 拓展前一个字符m至n次(含n) 最小匹配