正则通配符
符号 | 描述 | 备注 |
. | 匹配除了换行以外的任何单字符,要是想匹配这个字符:\. | |
* | 匹配零个或多个字符,要是想匹配这个字符:\* | 贪婪 |
? | 匹配0个或1个字符,要是想匹配这个字符:\? | 非贪婪 |
^ | 匹配输入字符的起始位置,要是想匹配这个字符:\^ | |
+ | 匹配一个或多个字符,要是想匹配这个字符:\+ | 贪婪 |
$ | 匹配输入字符串的结束位置,要是想匹配这个字符:\$ | |
\b | 匹配一个单词边界,即字与空格间的位置 | |
\B | 非单词边界匹配 | |
() | 标记一个子表达式的开始和结束位置,子表达式可以获取供以后使用,若要匹配这些字符:\(\) | |
[ | 标记一个中括号表达式的开始,要是想匹配这个字符:\[ | |
{ | 标记限定符表达式的开始,要是想匹配这个字符:\{ | |
| | 指明两项之间的一个先择,要是想匹配这个字符:\ | |
{n} | n为一个非负整数,匹配确定的n次 | |
{n,} | n是一个非负整数,至少匹配n次 | |
{n,m} | n,m均为非负整数,其中n<=m。最小匹配n次,最多匹配m次 | |
\s | 匹配所有空白符,包括空格、制表符、换页符等等价于[ \f\n\r\t\v] | |
\S | 匹配任何非空白字符,等价于[^ \f\n\t\r\v] | |
\t | 匹配一个制表符,等价于 \x09 | |
\n | 匹配一个换行符,等价于\x0a | |
\r | 匹配一个回车符,等价于\x0d | |
\f | 匹配一个换页符,等价于\x0c | |
\v | 匹配一个垂直制表符,等价于\x0b | |
\cx | 匹配由x指明的控制字符,但是x的值必须是A-Z或a-z之一,否则,c被视为原义字符'c' | |
[0-9]+ | 匹配多个数字 | |
[0-9] | 匹配单个数字 | |
exp1(?=exp2) | 查找exp2前面的exp1 | ruddkgd(?=[\d+])表示匹配数字前面的ruddkgd |
(?<=exp2)exp1 | 查找exp2后面的exp1 | (?<=[\d+])[a-z]+表示匹配数字后面的字母 |
exp1(?!exp2) | 查找后面不是exp2的exp1 | [a-z](?![\d+])表示匹配后面不是数字的字母 |
?:exp | 匹配exp但不获取匹配结构 | |
x|y | 匹配x或y | |
\d | 匹配一个数字符 | |
\D | 匹配一个非数字符 | |
\w | 匹配字母、数字、下划线,等价于[A-Za-z0-9_] | |
\W | 匹配非字母、数字、下划线,等价于[^A-Za-z0-9_] | |
re.findall(r'ruddkgd(?=[\d+])', e) 表示匹配e中数字前面的ruddkgd
re.findall(r'(?<=[\d+])[a-z]+', e) 表示匹配e中数字后面的字母
re.findall(r'[a-z](?![\d+])', e1) 表示匹配e1中后面不是数字的字母
re.findall(r'^[a-z0-9_-]{3,15}$',e) 表示匹配e中由小写字母和数字以及下划线,-组成,字符一共3~15个的字符串。
#惰性匹配
#r'a.*?b' ------> 以a开头b结尾,中间尽量少的匹配字符
f = 'acdaafgbkjfalbldkfasjfb'
print(re.findall(r'a.*?b', f))#['acdaafgb', 'alb', 'asjfb']
正则修饰符
修饰符 | 含义 | 描述 |
i | ignore-不区分大小写 | 将匹配设置为不区分大小写,搜索时不区分大小写 |
g | global-全局匹配 | 查找所有的匹配项 |
m | more-多行匹配 | 使边界字符^和$匹配每一行的开头和结尾,注意:是多行,而不是整个字符串的开头和结尾 |
s | 特殊字符圆点.中包含换行符\n | 默认情况下的圆点.是匹配换行符\n之外的任何字符,加上s修饰符之后,圆点.中包含换行符\n |
在python中:
•re.I 使匹配对大小写不敏感
•re.L 做本地化识别匹配
•re.M 多行匹配,影响^和$
•re.S 使.匹配包括换行在内的所有字符
•re.U 根据Unicode字符集解析字符.这个标志影响\w \W \b \B
•re.X 该标志通过给予你更灵活的格式以便你将正则表达式写的更易于理解.
正则优先级
等级 | 运算符 | 描述 |
高 | \ | 转义字符 |
| | (),(?:),(?=),[] | 圆括号和方括号 |
| | *,+,?,{n},{n,},{n,m} | 限定符 |
v | ^,$,\任何元字符、任何字符 | 定位点和序列 |
低 | | | 替换,“或”操作 |
^[a-zA-Z0-9_]{1,}$ // 所有包含一个以上的字母、数字或下划线的字符串
^[1-9][0-9]{0,}$ // 所有的正整数
^\-{0,1}[0-9]{1,}$ // 所有的整数
^[-]?[0-9]+\.?[0-9]+$ // 所有的浮点数
^[a-zA-Z0-9_]+$ // 所有包含一个以上的字母、数字或下划线的字符串
^[1-9][0-9]*$ // 所有的正整数
^\-?[0-9]+$ // 所有的整数
^[-]?[0-9]+(\.[0-9]+)?$ // 所有的浮点数
正则分组
- 分组 ()()()\1\2\3 \1表示与第一个()中内容一样,\2表示与第二个()中得内容一样,\3表示与第三个()中的内容一样