正则表达式(regular expression)
import re: Python处理正则表达式的模块
re —>reqular expression:通过模糊的方式匹配字符串的内容
注意:正则表达式前最好加上原字符”r”:表示后面跟的字符串只表示字符原始含义
>>> import re
>>> print(r"a\nb")#不加r,会把"\n"当成回车符
a\nb
>>> print("a\nb")
a
b
>>> re.match("a\\b","a\\b")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.match(r"a\\b","a\\b")
<_sre.SRE_Match object; span=(0, 3), match='a\\b'>
1. 正则表达式—作用:
2. 正则表达式—特殊表达式含义:
一般字符(匹配自身):
#.(点):匹配除”\n”以外的任意一个字符,但是在DOTALL模式中可以匹配换行符
>>> re.match("a.c","abc")
<_sre.SRE_Match object; span=(0, 3), match='abc'>
>>> re.match("a.c","a c"
<_sre.SRE_Match object; span=(0, 3), match='a c'>
>>> re.match("a.c","a1c")
<_sre.SRE_Match object; span=(0, 3), match='a1c'>
>>> re.match("a.c","a\nc")#不能匹配\n,返回None
>>>
#\(反斜杠):转义一个特殊的字符,使这个字符表示原来字面上的意思。
如"$",表示原字符$,而不是正则表达式中表示匹配行尾的意思。
>>> re.match(r"a\"c","a\"c")
<_sre.SRE_Match object; span=(0, 3), match='a"c'>
#不写\,会出错。因为引号都是成对出现。加上\,可以把引号的分隔作用取消了,当成了一个普通字符
>>> re.match(r"a"c","a"c")
File "<stdin>", line 1
re.match(r"a"c","a"c")
^
SyntaxError: invalid syntax
- 预定义字符集(可以写在[]中)
#[…](方括号):匹配括号中出现的任意单个字符(或的关系)
>>> re.match(r"[abcd]","ab1234")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.match(r"[abcd]","bb1234")
<_sre.SRE_Match object; span=(0, 1), match='b'>
>>> re.match(r"[abcd]","cb1234")
<_sre.SRE_Match object; span=(0, 1), match='c'>
#[a-zA-Z0-9]表示范围是大小写字母+数字
>>> re.match(r"[a-zA-Z0-9]","cb1234")
<_sre.SRE_Match object; span=(0, 1), match='c'>
>>> re.match(r"[a-zA-Z0-9]","Cb1234")
<_sre.SRE_Match object; span=(0, 1), match='C'>
>>> re.match(r"[a-zA-Z0-9]","1234")
<_sre.SRE_Match object; span=(0, 1), match='1'>
#[^…]:不匹配方括号中列出的单个字符(注意只能针对单个字符)
>>> re.match(r"[^abc]","a1234")
>>> re.match(r"[^abc]","b1234")
>>> re.match(r"[^abc]","c1234")
>>> re.match(r"[^abc]","d1234")
<_sre.SRE_Match object; span=(0, 1), match='d'>
>>> re.match(r"[^abc]","1234")
<_sre.SRE_Match object; span=(0, 1), match='1'>
>>> re.match(r"[^abc]"," 1234")
<_sre.SRE_Match object; span=(0, 1), match=' '>
>>> re.match(r"[^abc]","\n1234")
<_sre.SRE_Match object; span=(0, 1), match='\n'>
>>> re.search(r"[^abc]","\n1234")
<_sre.SRE_Match object; span=(0, 1), match='\n'>
>>> re.search(r"[^abc]","a1234")
<_sre.SRE_Match object; span=(1, 2), match='1'>
>>> re.search(r"[^abc]","abc234")
<_sre.SRE_Match object; span=(3, 4), match='2'>
>>>
#^在[]外面表示匹配字符串开头
#表示必须以abc开头
>>> re.match(r"^abc","abc234")
<_sre.SRE_Match object; span=(0, 3), match='abc'>
>>> re.search(r"^[abc]","abc234")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>>
#\d 和\D:表示数字和非数字
>>> re.match(r"\d","12")
<_sre.SRE_Match object; span=(0, 1), match='1'>
>>> re.match(r"\d","a12")
>>> re.match(r"\d","012")
<_sre.SRE_Match object; span=(0, 1), match='0'>
>>> re.match(r"\D","a012")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.match(r"\D"," 012")
<_sre.SRE_Match object; span=(0, 1), match=' '>
>>> re.match(r"\D","0 12")
>>> re.match(r"\D"," 0 12")
<_sre.SRE_Match object; span=(0, 1), match=' '>
#\s 和\S 表示:匹配任意一个空白字符:[<空格>\t\r\n\v\f] 和 匹配任意一个非空白字符
>>> re.match(r"\s"," 012")
<_sre.SRE_Match object; span=(0, 1), match=' '>
>>> re.match(r"\s","\n012")
<_sre.SRE_Match object; span=(0, 1), match='\n'>
>>> re.match(r"\s","\t012")
<_sre.SRE_Match object; span=(0, 1), match='\t'>
>>> re.match(r"\s","\r012")
<_sre.SRE_Match object; span=(0, 1), match='\r'>
>>> re.match(r"\s","\f012")
<_sre.SRE_Match object; span=(0, 1), match='\x0c'>
>>> re.match(r"\s","012")
>>>
>>> re.match(r"\S","012")
<_sre.SRE_Match object; span=(0, 1), match='0'>
>>> re.match(r"\S","a012")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.match(r"\S","*012")
<_sre.SRE_Match object; span=(0, 1), match='*'>
>>> re.match(r"\S"," 012")
>>>
#\w 和 \W 表示:匹配字母,数字,下划线,中文 和 非字母,数字,下划线,中文
>>> re.match(r"\w","012")
<_sre.SRE_Match object; span=(0, 1