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 因为 4line 相连,因此匹配失败。

>>> re.findall(r'.*line\B.*', s5, flags=re.MULTILINE)
['line4']

上述示例 正则表达式 '.*line\B.*' 匹配 line 后不是单词边界的行, \B 匹配非单词边界。

祝各位学员学习愉快!