1、[] | :或的关系
知识点:
match 或者search只能找到一个匹配结果
findall可以匹配多个结果
>>> import re #re是匹配
>>> re.match(r"[abc]x","ax")
<_sre.SRE_Match object; span=(0, 2), match='ax'>
>>> re.match(r"[abc]x","bx")
<_sre.SRE_Match object; span=(0, 2), match='bx'>
>>> re.match(r"[abc]x","cx")
<_sre.SRE_Match object; span=(0, 2), match='cx'>
注意:“或”的关系必须得有这么一个东西
>>> import re
>>> re.findall(r"[a-z][1-9]","i1a2x3@03")
['i1', 'a2', 'x3']
这里要满足一个字母后面有一个数字,所以才能匹配到。
>>> re.findall(r"[a-z][1-9]","iad23@")
['d2']
>>> re.findall(r"[a-z][1-9]","iad@")
[]
>>> re.findall(r"[a-z][1-9]","iad2")
['d2']
2、同时匹配字母和数字
>>> re.findall(r"[a-zA-Z0-9]","i1a2x3@03AZX")
['i', '1', 'a', '2', 'x', '3', '0', '3', 'A', 'Z', 'X']
3、字母数字连着匹配多个“+”
>>> re.findall(r"[a-zA-Z0-9]+","i1a2x3@03AZX")
['i1a2x3', '03AZX']
Search匹配:
>>> re.search(r"[a-zA0-9]+","i1a2x3@03AZX")
<_sre.SRE_Match object; span=(0, 6), match='i1a2x3'>
4、“^”在方括号内表示取反
>>> re.search(r"[^a-zA0-9]+","i1a2x3@03AZX")
<_sre.SRE_Match object; span=(6, 7), match='@'>
“^”在方括号外表示必须从第一个字符开始匹配,只要匹配到了就会直接返回。
>>> re.search(r"abc","123abc456")
<_sre.SRE_Match object; span=(3, 6), match='abc'>
>>> re.search(r"^abc","123abc456")
>>> re.search(r"^abc","abc456")
<_sre.SRE_Match object; span=(0, 3), match='abc'>
5、“$”结尾匹配
>>> re.search(r"abc$","abc456")
>>> re.search(r"abc$","456abc")
<_sre.SRE_Match object; span=(3, 6), match='abc'>
>>> re.search(r"^abc$","456abc")
>>> re.search(r"^abc$","abc")#开头和结尾都匹配,就是恰好的意思
<_sre.SRE_Match object; span=(0, 3), match='abc'>
6、"^…$"开头和结尾都匹配(精确匹配)
>>> re.search(r"^abc$","abcabc")
>>> re.search(r"^a123cdf$","a123cdf")
<_sre.SRE_Match object; span=(0, 7), match='a123cdf'>
>>> re.search(r"^a123cdf$","a123cdf1")
>>> re.search(r"^a123cdf$","1a123cdf")
>>> re.search(r"^a123cdf$","123cdf")
>>> re.findall(r"^a.*?c","abcaeiec")
['abc']
>>> re.findall(r"a.*?c","abcaeiec")
['abc', 'aeiec']
7、“a.b”中间的点是任意匹配
>>> re.search(r"a.b","a*b")
<_sre.SRE_Match object; span=(0, 3), match='a*b'>
>>> re.search(r"a.b","a1b")
<_sre.SRE_Match object; span=(0, 3), match='a1b'>
>>> re.search(r"a.b","aAb")
<_sre.SRE_Match object; span=(0, 3), match='aAb'>
>>> re.search(r"a.b","a b")
<_sre.SRE_Match object; span=(0, 3), match='a b'>
>>> re.search(r"a.b","a,b")
<_sre.SRE_Match object; span=(0, 3), match='a,b'>
>>> re.search(r"a.b","a\nb")#\n这个不行
>>> re.search(r"a.+b","a123456b789b")
<_sre.SRE_Match object; span=(0, 12), match='a123456b789b'>
>>> re.search(r"a.+?b","a123456b789b")
<_sre.SRE_Match object; span=(0, 8), match='a123456b'>
8、匹配\n
>>> re.search(r"a.b","a\nb",re.DOTALL)
<_sre.SRE_Match object; span=(0, 3), match='a\nb'>
9、group分组匹配
>>> re.search(r"a\d+c","a123c")
<_sre.SRE_Match object; span=(0, 5), match='a123c'>
>>> re.search(r"a(\d+)c","a123c")
<_sre.SRE_Match object; span=(0, 5), match='a123c'>
>>> re.search(r"a(\d+)c","a123c").group()
'a123c'
>>> re.search(r"a(\d+)c","a123c").group(0)
'a123c'
>>> re.search(r"a(\d+)c","a123c").group(1)
'123'
>>> re.search(r"(a)(\d+)(c)","a123c").group(1)
'a'
>>> re.search(r"(a)(\d+)(c)","a123c").group(2)
'123'
>>> re.search(r"(a)(\d+)(c)","a123c").group(3)
'c'
>>> re.search(r"(a)(\d+)(c)","a123c").group(4)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: no such group
>>> re.search(r"((a)(\d+)(c))","a123c").group(4)
'c'
10、findall分组匹配
>>> re.findall(r"abc\d+","abc1,abc2,abc3")
['abc1', 'abc2', 'abc3']
>>> re.findall(r"abc(\d+)","abc1,abc2,abc3")
['1', '2', '3']
>>> re.findall(r"(abc)(\d+)","abc1,abc2,abc3")
[('abc', '1'), ('abc', '2'), ('abc', '3')]
>>> re.findall(r"((abc)(\d+))","abc1,abc2,abc3")
[('abc1', 'abc', '1'), ('abc2', 'abc', '2'), ('abc3', 'abc', '3')]
11、\b边界匹配
>>> re.findall(r"boy","iboy,youboy boy girl")
['boy', 'boy', 'boy']
>>> re.findall(r"\bboy\b","iboy,youboy boy girl")
['boy']
>>> re.search(r"\bboy\b","iboy,youboy boy girl")
<_sre.SRE_Match object; span=(12, 15), match='boy'>
忽略大小写匹配
>>> re.search(r"\b\w+\b","I am a boy!")
<_sre.SRE_Match object; span=(0, 1), match='I'>
>>> re.findall(r"\b\w+\b","I am a boy!")
['I', 'am', 'a', 'boy']
12、或匹配
>>> re.search(r"[ab]","b")
<_sre.SRE_Match object; span=(0, 1), match='b'>
>>> re.search(r"[abcd]","ab")
<_sre.SRE_Match object; span=(0, 1), match='a'>
>>> re.search(r"ab|cd","ab")
<_sre.SRE_Match object; span=(0, 2), match='ab'>
>>> re.search(r"ab|cd","cd")
<_sre.SRE_Match object; span=(0, 2), match='cd'>
>>> re.search(r"ab|cd11","cd11")
<_sre.SRE_Match object; span=(0, 4), match='cd11'>
>>> re.search(r"ab|cd11","ab11")
<_sre.SRE_Match object; span=(0, 2), match='ab'>
>>>
>>> re.search(r"(ab|cd)11","ab11")
<_sre.SRE_Match object; span=(0, 4), match='ab11'>
>>> re.search(r"(ab|cd)11","cd11")
<_sre.SRE_Match object; span=(0, 4), match='cd11'>
>>> re.search(r"(ab|cd)11","ab11cd11")
<_sre.SRE_Match object; span=(0, 4), match='ab11'>
>>> re.findall(r"(ab|cd)11","ab11cd11")
['ab', 'cd']
>>> re.findall(r"(a-z|0-9)+","abcd123")
[]
>>> re.findall(r"([a-z]|[0-9])+","abcd123")
['3']
>>> re.findall(r"([a-z]|[0-9])","abcd123")
['a', 'b', 'c', 'd', '1', '2', '3']
>>> re.findall(r"(ab|cd)11","ab11")
['ab']
>>> re.search(r"(ab|cd)11","ab11")
<_sre.SRE_Match object; span=(0, 4), match='ab11'>
>>> re.findall(r"(\w)+","abcd123")
['3']
>>> re.findall(r"(\w+)","abcd123")
['abcd123']