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()会返回替换后的字符串以及总共的替换次数
