7. 边界匹配
边界匹配用于精确控制匹配的位置,而不仅仅是内容。
它的作用是避免误匹配,确保正则表达式只在特定位置(如字符串开头、结尾或单词边界)生效,从而提升匹配的准确性。
边界匹配的特殊字符
特殊字符
说明
^匹配字符串的开头(多行模式下匹配行首)。
$匹配字符串的结尾(多行模式下匹配行尾)。
\b匹配单词边界(即 \w 和 \W 之间的位置)。
\B匹配非单词边界(如单词内部的连续字母)。
示例
>>> s5 = '''line 1
... this is line 2
... line 3
... line4
... last line 5'''
>>> re.findall(r'^line.*', s5, flags=re.MULTILINE)
['line 1', 'line 3', 'line4']
上述示例中S5绑定的字符串内部有换行。我们使用多行模式 re.MULTILINE 进行匹配。可见 r'^line.*' 只匹配了 line开头的行。
>>> re.findall(r'^line.*[1-3]$', s5, flags=re.MULTILINE)
['line 1', 'line 3']
上述示例中可见 r'^line.*[1-3]$' 只匹配了 line开头,并且以 数字 1-3结尾的行。$ 匹配行尾, ^ 匹配行首。
单词边界示例
>>> s5 = '''line 1
... this is line 2
... line 3
... line4
... last line 5'''
>>> re.findall(r'.*line\b.*', s5, flags=re.MULTILINE)
['line 1', 'this is line 2', 'line 3', 'last line 5']
上述示例 正则表达式 r'.*line\b.*' 匹配 line 后是单词边界的行,其中第四行 line4 因为 4 和 line 相连,因此匹配失败。
>>> re.findall(r'.*line\B.*', s5, flags=re.MULTILINE)
['line4']
上述示例 正则表达式 '.*line\B.*' 匹配 line 后不是单词边界的行, \B 匹配非单词边界。
祝各位学员学习愉快!