Re常识(只写的较为重要的):
1、. —> 在默认模式下,它匹配除换行以外的任何字符。
eg: >>> re.search('...','123').group()
'123'
2、 ^ —> 匹配字符串的开头,并且在多行模式下也在每个换行之后立即匹配。
eg: >>> re.search('^2...','2123').group()
'2123'
>>> re.search('2...','12123').group()
'2123'
3、$ —> 匹配字符串的末尾,或者刚好在字符串末尾的换行之前,在多行模式下也匹配换行之前。
4、* —> 导致产生的RE匹配前一个RE的0个或多个重复[0, +∞)。
5、 + —> 导致产生的RE匹配前一个RE的1个或多个重复(0, +∞)。
6、 ? —> 导致产生的RE匹配前面的RE的0次或一次。
7、 *?, +?, ?? —> “*”、“+”和“?”限定词都是贪婪的;它们匹配尽可能多的文本。而在它们后面加上?则是使其匹配最少的字符。
eg: >>> re.search('.+>','123>abc>')
<_sre.SRE_Match object; span=(0, 8), match='123>abc>'>
>>> re.search('.+?>','123>abc>')
<_sre.SRE_Match object; span=(0, 4), match='123>'>
8、{m} —> 指定要匹配前一个RE的m个副本。
9、 {m,n} —> 指定要匹配前一个RE的m到n个副本。
10、 {m,n}? —> 指定要匹配前一个RE的m到n个副本,尽可能的少匹配字符。
eg: >>> re.search('.{2,5}','123456').group()
'12345'
>>> re.search('.{2,5}?','123456').group()
'12'
11、(…) —> 捕获组,可以让在括号里面的匹配串为一个整体。
eg: >>> re.search('.(12)+', 'a1212').group()
'a1212'
12、(?P…) —> 命名捕获组。
13、 (?P=name) —> 使用命名的捕获组。
eg: >>> re.search('(?P<par>12) (?P=par)','12 12')
<_sre.SRE_Match object; span=(0, 5), match='12 12'>
————2020年4月12日 XXX