(?:pattern) 匹配而结果不保存该分组
示例:
res = re.search(r'\w*@(?:126|163)\.com(?#匹配126,163邮箱)', 'myemail@163.com')
if res:
print(res.group()) # myemail@163.com
print(res.group(1)) # 会报 IndexError: no such group,说明(?:126|163)不会被保存
(?#annotations) 注释作用不参与匹配(示例如上)
(?P<group_name>pattern) 分组匹配,并取别名;(?P=group_name) 匹配group_name分组完全一样的字符串
示例
# 不取别名 res = re.search(r'(.{5})\1', '祖国万岁!祖国万岁!')
res = re.search(r'(?P<repeat>.{5})(?P=repeat)', '祖国万岁!祖国万岁!')
if res:
print(res.group()) # 祖国万岁!祖国万岁!
print(res.group(1)) # 祖国万岁!
print(res.group('repeat')) # 祖国万岁!
(?=pattern) 正向前视断言(某被匹配位置后必须紧接pattern规则的字符串,但并不会占用原字符串pattern位置的字符)
示例
# 例子不好,但意思就是 战狼 后面必须含数字,但是 数字2 不会被消耗掉,可以继续参与匹配
res = re.search(r'(?P<film_name>\D*(?=\d+))(?P<version>\d+)', '战狼2')
if res:
print(res.group()) # 战狼2
print(res.group("film_name")) # 战狼2
print(res.group("version")) # 2
print(re.search(r'(?P<film_name>\D*(?=\d+))(?P<version>\d+)', '战狼')) # None
(?<=pattern) 正向后视断言(某被匹配位置前必须匹配pattern规则的字符串,但并不会占用原字符串pattern位置的字符)
示例
res = re.search(r'(?<=中国)\w*', '中国台湾')
if res:
print(res.group()) # 台湾
res = re.search(r'(?<=中国)\w*', '台湾')
print(res) # None
(?!pattern)与(?=pattern)相反,负向前视断言(被匹配位置后不能出现pattern匹配的内容)
示例
res = re.search(r'china(?!\.net)', 'china.net')
if res:
print(res.group()) # None
res = re.search(r'china(?!\.net)', 'china.org')
if res:
print(res.group()) # china
(?<!pattern)与(?<=pattern)相反,负向后视断言(被匹配位置前不能出现pattern匹配的内容)
示例
res = re.search(r'(?<!今天)下雨', '今天下雨')
print(res) # None
res = re.search(r'(?<!今天)下雨', '明天下雨')
if res:
print(res.group()) # 下雨
(?<!(id/group_name)yes[|no]) 匹配得到id/group_name则匹配yes;否则,匹配no。(去掉|no可以不匹配no)
示例
res = re.search(r'(w)?(?(1)e|others)', 'we')
if res:
print(res.group()) # we
res = re.search(r'(w)?(?(1)e|others)', 'others')
if res:
print(res.group()) # others
版权声明:本文为weixin_45478072原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。