淘先锋技术网

首页 1 2 3 4 5 6 7

1. 概述

断言是指对匹配到的文本位置有要求。

在有些情况下,我们对要匹配的文本的位置也有一定的要求。为了解决这个问题,正则中提供了一些结构,只用于匹配位置,而不是文本内容本身,这种结构就是断言。

常见的断言有三种:单词边界、行的开始或结束以及环视。

2. 单词边界

  • 使用\b 来表示单词的边界
    单词边界演示
    # python例子
     import re
     test_str = "tom asked me if I would go fishing with him tomorrow."
     re.sub(r'\btom\b', 'jerry', test_str)
    'jerry asked me if I would go fishing with him tomorrow.'
    

3.行的开始或结束

如果我们要求匹配的内容要出现在一行文本开头或结尾,就可以使用 ^ 和 $ 来进行位置界定。

3.1 作用示例

  • 日志起始行判断
  • 输入数据校验
     python例子
     import re
     re.search('\d{6}', "1234567") is not None
      True    <-- 能匹配上 (包含6位数字)
     re.search('^\d{6}', "1234567") is not None
      True    <-- 能匹配上 (6位数字开头)
     re.search('\d{6}$', "1234567") is not None
      True    <-- 能匹配上 (6位数字结尾)
     re.search('^\d{6}$', "1234567") is not None
      False   <-- 不能匹配上 (只能是6位数字)
     re.search('^\d{6}$', "123456") is not None
      True    <-- 能匹配上 (只能是6位数字)
    

4.环视

环视就是要求匹配部分的前面或后面要满足(或不满足)某种规则,有些地方也称环视为零宽断言。
环视

4.1 环视与子组

环视中虽然也有括号,但不会保存成子组。保存成子组的一般是匹配到的文本内容,后续用于替换等操作,而环视是表示对文本左右环境的要求,即环视只匹配位置,不匹配文本内容。