|
Python |
PHP |
正则表达式 |
\d :匹配一个数字字符,还可以使用[0-9] \D :匹配一个非数字字符,还可以使用[^0-9] \w :匹配包括下划线的任何单词字符,还可以使用[0-9a-zA-Z_] \W :匹配任何非单词字符,还可以使用[^\w] \s :匹配任何空白字符,space缩写 \S :匹配任何非空白字符,还可以使用[^\s] . :匹配除 "\n" 之外的任何单个字符 [\u4e00-\u9fa5] :匹配中文字符中的任一字符 |
|
|
* :匹配前面的子表达式零次或多次,0到多,{0,} + :匹配前面的子表达式一次或多次,1到多,{1,} ? :匹配前面的子表达式零次或一次,0或1,{0,1}
{n} :匹配确定的 n 次 {n,} :至少匹配n 次 {n,m} :最少匹配 n 次且最多匹配 m 次 |
|
|
^ :匹配输入字符串的开始位置 $ :匹配输入字符串的结束位置 |
|
|
[a-z] :匹配字符a到字符z之间的任一字符 [A-Z] :匹配字符A到字符Z之间的任一字符 [0-9] :匹配数字0到9之间的任一数字 [0-9a-z] :匹配数字0到9或字符a到字符z之间的任一字符 [0-9a-zA-Z] :匹配数字0到9或字符a到字符z或字符A到字符Z之间的任一字符
[^a-z] :匹配除字符a到字符z以外的任一字符 [^0-9] :匹配除数字0到9以外的任一字符 |
|
|
选择匹配符|,匹配左边或右边 |
|
|
Python |
PHP |
模块 |
import re |
|
|
定义正则模式时,如果想要避免因为转译\引起正则错误,可以使用转译区r'' |
|
正则匹配 |
import re s = '010-12345' print(re.match(r'^\d{3}-\d{5}$',s)) 如果匹配成功返回一个对象,匹配失败返回None |
|
字符串切分 |
l = 'a b c' print(re.split(r'\s+',l)) l = 'a,b, c ;, d' print(re.split(r'[\s|,|;]+',l))
|
|
提取子串 .group(n) |
s = '010-12345' m = re.match(r'^(\d{3})-(\d{5})$',s) print(m.group(0)) print(m.group(1))
group(0)为匹配到的子串 group(1)表示子表达式匹配到的子串 group(2)… |
|
|
正则匹配默认为贪婪匹配,会匹配尽量多长度 在后面加个?可以更换为非贪婪模式 |
|
获取所有匹配到的信息 |
s = '010-12345,011-12346' m = re.findall(r'(\d{3}-\d{5})',s) print(m)
|
|
正则表达式预编译 |
s = '010-12345,011-12346' pre = re.compile(r'(\d{3}-\d{5})') print(pre.findall(s)) 预编译可以在需要大量重复匹配的时候提高一点效率 |
|
正则替换 |
text = "JGood is a handsome boy" print(re.sub(r'(\sis\sa\s)', r'-\1-', text)) 反向引用的时候注意使用转译区,否则因为\转译的关系会出现错误
re.subn()会返回替换后的字符串以及总共的替换次数 |
|