回忆几条正则的命令:
(1)按照类型匹配
如果需要找到潜在的多个可能性文字, 我们可以使用 []
将可能的字符囊括进来. 比如 [ab]
就说明我想要找的字符可以是 a
也可以是 b
.
- \d : 任何数字
- \D : 不是数字
- \s : 任何 white space, 如 [\t\n\r\f\v]
- \S : 不是 white space
- \w : 任何大小写字母, 数字和 “” [a-zA-Z0-9]
- \W : 不是 \w
- \b : 空白字符 (只在某个字的开头或结尾)
- \B : 空白字符 (不在某个字的开头或结尾)
- \\ : 匹配 \
- . : 匹配任何字符 (除了 \n)
- ^ : 匹配开头
- $ : 匹配结尾
- ? : 前面的字符可有可无
- (2)重复匹配
*
: 重复零次或多次+
: 重复一次或多次{n, m}
: 重复 n 至 m 次{n}
: 重复 n 次- (3)常见的匹配指令
print(re.search(r"ab{2,10}", "a")) # None
print(re.search(r"ab{2,10}", "abbbbb")) # <_sre.SRE_Match object; span=(0, 6), match='abbbbb'>
(4)分组匹配
match = re.search(r"(\d+), Date: (.+)", "ID: 021523, Date: Feb/12/2017") print(match.group()) # 021523, Date: Feb/12/2017 print(match.group(1)) # 021523 print(match.group(2)) # Date: Feb/12/2017
match = re.search(r"(?P<id>\d+), Date: (?P<date>.+)", "ID: 021523, Date: Feb/12/2017")
print(match.group('id')) # 021523
print(match.group('date')) # Date: Feb/12/2017
(5)匹配全部
以上的指令仅仅是匹配从头发现的第一条指令,这条指令可以匹配到全部的复合要求的内容
# findall
print(re.findall(r"r[ua]n", "run ran ren")) # ['run', 'ran']
# | : or
print(re.findall(r"(run|ran)", "run ran ren")) # ['run', 'ran']
(6)替换命令
print(re.sub(r"r[au]ns", "catches", "dog runs to cat")) # dog catches to cat
(7)分割命令
print(re.split(r"[,;\.]", "a;b,c.d;e")) # ['a', 'b', 'c', 'd', 'e']
(8)编译器
compiled_re = re.compile(r"r[ua]n")
print(compiled_re.search("dog ran to cat")) # <_sre.SRE_Match object; span=(4, 7), match='ran'>