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