导入
Python 正则表达式 `match` 函数
Python 正则表达式 match() 函数详解及示例
match 函数
match 函数尝试将一个正则表达式 re 模式与字符串进行匹配,支持可选的标志位(flags)。
该函数的语法如下:
1re.match(pattern, string, flags=0)
其中:
pattern是要匹配的正则表达式;string是待搜索的字符串,match仅在字符串的开头尝试匹配;flags是可通过按位或运算符(|)组合使用的不同标志位。
匹配标志(Match Flags)
| 修饰符 | 说明 |
|---|---|
re.I | 执行不区分大小写的匹配。 |
re.L | 根据当前区域设置(locale)解释单词,影响字母类(\w 和 \W)以及词边界行为(\b 和 \B)。 |
re.M | 使 $ 匹配行尾,^ 匹配任意一行的行首。 |
re.S | 使点号(.)匹配包括换行符在内的所有字符。 |
re.U | 根据 Unicode 字符集解释字母,影响 \w、\W、\b、\B 的行为。 |
re.X | 忽略正则表达式中的空白字符(除非在字符集 [] 内或被反斜杠转义),并将未转义的 # 视为注释开始。 |
返回值
re.match函数在匹配成功时返回一个 匹配对象(match object),失败时返回None。- 可使用匹配对象的
group(n)或groups()方法获取匹配到的内容:group(n=0)返回整个匹配结果,若指定n则返回第n个子组;groups()返回包含所有子组匹配内容的元组(若无子组则为空元组)。
示例 1
查找单词 to 前后的词语:
1#!/usr/bin/python 2import re 3 4line = "Learn to Analyze Data with Scientific Python" 5 6m = re.match(r'(.*) to (.*?) .*', line, re.M|re.I) 7 8if m: 9 print("m.group() : ", m.group()) 10 print("m.group(1) : ", m.group(1)) 11 print("m.group(2) : ", m.group(2)) 12else: 13 print("No match!!")
第一个子组 (.*) 匹配到字符串:Learn,第二个子组 (.*?) 匹配到:Analyze。
示例 2
groups([default]) 返回一个元组,包含匹配中所有的子组(从第1个开始,直到模式中定义的所有组):
1#!/usr/bin/python 2import re 3 4line = "Learn Data, Python" 5 6m = re.match(r'(\w+) (\w+)', line, re.M|re.I) 7 8if m: 9 print("m.groups() : ", m.groups()) 10 print("m.group(1, 2) : ", m.group(1, 2)) 11else: 12 print("No match!!")
示例 3
groupdict([default]) 返回一个字典,包含所有命名子组的匹配结果,键为子组名称:
1#!/usr/bin/python 2import re 3 4number = "124.13" 5 6m = re.match(r'(?P<Expotent>\d+)\.(?P<Fraction>\d+)', number) 7 8if m: 9 print("m.groupdict() : ", m.groupdict()) 10else: 11 print("No match!!")
示例 4
start、end:如何匹配字符串的开头或结尾?可以使用 \A 和 \Z 元字符。我们用反斜杠对其进行转义。可用于匹配以特定字母开头或以某字符结尾的字符串。
1import re 2 3values = ["Learn", "Live", "Python"] 4 5for value in values: 6 # 匹配字符串开头 7 result = re.match(r"\AL.+", value) 8 if result: 9 print("START MATCH [L]:", value) 10 11 # 匹配字符串结尾 12 result2 = re.match(r".+n\Z", value) 13 if result2: 14 print("END MATCH [n]:", value)
示例 5
start([group]) 和 end([group]) 方法返回由 group 匹配的子串的起始和结束索引。具体示例请见下一课。