Python个人学习笔记 正则表达式(一)
正则表达式的组成
①元字符
元字符一次只能匹配一个字符。
特殊元字符:
⑴ .
点运算符。可以匹配除换行符外任意一个字符。若启用DOTALL标志,则也可以匹配换行符。
⑵ ^
插入符号。可以匹配字符串的开头。若启用MULTILINE标志,则也可以匹配行的开头。
⑶ \A
可以匹配字符串的开头。但没有多行模式。
⑷ $
可以匹配字符串的结尾。若启用MULTILINE标志,则也可以匹配行的结尾。
⑸ \b
匹配词边界。
要匹配的词后面不能再跟其他字母。
⑹ \B
匹配非词边界。
和\b相反。
⑺ \d
匹配任意数字字符。若启用UNICODE标志,则还能匹配更广泛的 Unicode 数字字符。
⑻ \D
匹配任意非数字字符。
⑼ \s
匹配任意空白字符。
⑽ \S
匹配任意非空白字符。
⑾ \w
匹配任意字母、数字或下划线。
⑿ \W
匹配任意非字母、数字或下划线。
②字符集
可以匹配字符集中的任意一个字符。用[]创建字符集。
减号(-)若出现在字符集内的2个字符之间,则表示2个字符范围内的字符;
若出现在字符集的开头或结尾,则表示减号这个符号。
中括号表示字符集,如果想匹配中括号,最好加 \ 来转义。
虽然不加也能匹配,但有时候会出错。
^表示不在字符集内的任意字符。
③表达式量词
可以和各单个字符组合。
⑴ *
匹配0次或多次。
⑵ +
匹配1次或多次。
⑶ ?
匹配0次或1次。
⑷ |
或运算符。
▲注意,或运算符的优先级非常低。
⑸ {}
{n}
精确匹配n次。
{m,n}
匹配[m,n]次。
{,n}
至多匹配n次。
{n,}
至少匹配n次。
⑹ ()
将括号内的所有字符视为一个组,与其他量词组合会作用于整个组。
⑺ \n
匹配到的第n个捕获组。
\0表示匹配到的整个字符串。
④组
用小括号将小表达式组成大表达式。

Match对象
match()函数和search()函数匹配成功会返回一个Match对象,匹配失败则返回None。
Match对象的用法
用括号给正则表达式模式分组,Match对象可以确定每个组中子表达式匹配到的文本。
⑴ lastindex
返回匹配到的文本组的数量。
4组括号,所以输出为4。
⑵ group()
返回指定组匹配到的文本。默认值为0,返回整个正则表达式匹配到的文本。
⑶ groups()
返回一个包含所有组的元组。
⑷ groupdict()
返回所有已命名组组成的字典。
未命名的组就不会被输出。
⑸ start() / end()
返回指定组匹配到的文本在字符串中的开始/结束位置。(左闭右开区间)
⑹ span()
返回指定组匹配到的文本在字符串中的开始和结束的位置。

正则表达式功能标志
匹配函数的第三个参数。
⑴ re.ASCII / re.A
限制匹配规则为 ASCII 字符集。启用后,\w、\W、\b、\B、\d、\D、\s 和 \S 等特殊字符将仅匹配 ASCII 字符集中的对应字符。
⑵ re.IGNORECASE / re.I
不区分大小写。
⑶ re.LOCALE / re.L
使用数字字符、单词边界、数字匹配时遵循当前的本地化设置。
⑷ re.MULTILINE / re.M
多行模式。使用^和$匹配行首和行尾以及字符串的开头和结尾。
⑸ re.DOTALL / re.S
使用点运算符.匹配所有字符,包括换行符\n。
⑹ re.UNICODE / re.U
#使用UNICODE格式匹配字母数字字符、单词边界和数字。
⑺ re.VERBOSE / re.X
冗长模式。会忽略空格和换行(除非是正则表达式的一部分),可以在正则表达式中加注释,便于理解。
去掉 re.X 将会输出False。
⑻ re.DEBUG
在IDLE中执行操作时将输出编译后的正则表达式的调试信息。

匹配小技巧
⑴ compile()
参数为正则表达式,编译为一个正则表达式对象,方便重复使用。
⑵ fullmatch() / $
完全匹配。
当用match()函数的时候,只要开头匹配到了,就会算是匹配成功。
但是字符串中含有空格,并不是完全匹配的,会与预期不符。这时候可以在表达式结尾加$或者用fullmatch()函数,只有完全匹配才会返回Match对象。
⑶ \number
指定组。
上面的例子中,有两个组 (\w+)和([a-z]+),\2则表示第二组。
(\w+)匹配到ngm,([a-z]+)匹配到hhay。
\n会记录第n组所匹配到的内容,所以这个\2就表示hhay。
所以下面的会返回True。
\n可以用于sub()函数替换文本中重复的内容等功能。





