https://blog.youkuaiyun.com/sinat_20791575/article/details/54139404
正则表达式元字符如下:. ^ $ * + ? { } [ ] \ | ( )
. 匹配除换行符以外的所以字符
^ 规定匹配模式必须出现在目标字符串的开头,例如:^hell hello hellboy
$ 规定匹配模式必须出现在目标字符串的结尾,例如:ar$ car bar
* 其前一个字符必须在目标对象中连续出现零次或多次
+ 其前一个字符必须在目标对象中连续出现一次或多次
? 其前一个字符必须在目标对象中连续出现一次或零次
{n} 匹配确定的n次,例如:o{2} oo
{n,} 至少匹配n次,例如:o{2} oo ooo oooo
{n,m} 至少匹配n次,至多匹配m次,例如:o{2,3} oo ooo
[A-Z] A-Z内任意一个大写字母
[a-z] a-z内任意一个小写字母
[0-9] 0-9内任意一个数字,等价于 \d
[A-Za-z0-9] 任意一个字母或数字,等价于 \w
\ 转义字符,例如[ ==> [ , \==>\
| 管道符号,A和B是任意的RE,那么A|B就是匹配A或者B的一个新的RE。
\s 用于匹配单个空格,包括tab键和换行符
\S 用于匹配单个空格之外的所有字符
\d 匹配0-9的数字
\w 匹配字母、数字或下划线
\W 匹配所有和\w不匹配的字符
3. 正则匹配方式:
- re.findall(pattern, string) 匹配字符串中所有符合规则的字符串,并以列表形式返回
注意:
findall如果使用了分组,则输出的内容将是分组中的内容而非find到的结果,
为了得到find到的结果,要加上问号来启用“不捕捉模式”,就可以了。
>>> re.findall("www.(baidu|xinlang)\.com","www.baidu.com") ['baidu'] >>> re.findall("www.(?:baidu|xinlang)\.com","www.baidu.com") ['www.baidu.com']
- re.match(pattern, string, flags=0) 只匹配字符串中开头符合规则的字符串,其返回的是一个对象 pattern 是正则规则 string 是字符串 flags 是匹配模式
>>> s = '123abc4545' >>> re.match(r'\w',s) <_sre.SRE_Match object; span=(0, 1), match='1'> >>> re.match(r'\w',s).group() 只匹配字符串开头 '1'
- re.search(pattern,string,flags=0) 匹配字符串的所有,但是匹配即停止,只返回第一个匹配的字符 pattern 是正则规则 string 是字符串 flags 是匹配模式
>>> s = '123abc4545' >>> re.search(r'\w',s) <_sre.SRE_Match object; span=(0, 1), match='1'> >>> re.search(r'\w',s).group() '1' >>> re.search(r'\D',s).group() 'a'