Python3-正则表达式-(?(id/name)yes|no)详细示例

逻辑总结

'(?(id/name)yes|no)', 此正则一般用于前面已经划分了group的情况。id和name是group的id或者自定义名称。

此处的yes和no都分别表示正则表达式,yes和no只是占了正则表达式的位置,并不表示有yes和no选项参数。yes表示满足某些逻辑时会用到的正则表达式;no表示不满足某些逻辑时用到的正则表达式。

详细逻辑总结

(?(id/name)yes|no)前面的正则部分不匹配:直接返回None

(?(id/name)yes|no)前面的正则部分匹配

1.如果(group)匹配长度大于0

        1.1 yes占位正则可以匹配,则整体匹配规则:(?(id/name)yes|no)前+yes正则匹配;

        1.2 yes占位正则不可以匹配,如no占位正则不存在,则还是按照(?(id/name)yes|no)前+yes正则匹配;

        1.3 yes占位正则不可以匹配,如no占位正则存在,则按no占位正则匹配。

2.如果(group)匹配长度等于0

        2.1 yes占位正则是否能匹配都不会影响(和yes占位正则无关);

        2.2 如no占位正则存在,则按照(?(id/name)yes|no)前+no正则匹配;

        2.3 如no占位正则不存在,则按照(?(id/name)yes|no)前正则匹配

测试示例

以下测试前提是(?(id/name)yes|no)前面的正则部分可以匹配,如果不匹配直接输出none。

(group)匹配长度大于0

(group)

是否匹配

yes正则

是否匹配

no正则

是否存在

no正则

是否匹配

备注
re.match(r'(hello)?,[a-z]{2}(?(1)[a-z]{2})', 'hello,python')
任意任意

正则:(?(id/name)yes|no)前+yes正则

输出:hello,pyth

re.match(r'(hello)?,[a-z]{2}(?(1)[a-z]{5})', 'hello,python')
——

正则:(?(id/name)yes|no)前+yes正则

输出:None

re.match(r'(hello)?,[a-z]{2}(?(1)[a-z]{6})|[a-z]{2}', 'hello,python')

正则:no正则

输出:he

re.match(r'(www.)?[a-z]+(?(1).[a-z]{4}|.[a-z]{6})', 'www.baidu.com')

正则:no正则

输出:None

(group)匹配长度等于0

(group)

是否匹配

yes正则

是否匹配

no正则

是否存在

no正则

是否匹配

备注
re.match(r'(hello)?,[a-z]{2}(?(1)[a-z]{7}|[a-z]{2})', ',python')
任意

正则:(?(id/name)yes|no)前+no正则

输出:,pyth

re.match(r'(hello)?,[a-z]{2}(?(1)[a-z]{3}|[a-z]{7})', ',python')
任意

正则:(?(id/name)yes|no)前+no正则

输出:None

re.match(r'(hello)?,[a-z]{2}(?(1)[a-z]{7})', ',python')
任意——

正则:(?(id/name)yes|no)前正则

输出:,py

import re

print("-----group匹配长度大于0-----")
result = re.match(r'(hello)?,[a-z]{2}(?(1)[a-z]{2})', 'hello,python')
print("是,是,任意,任意:", result)

result = re.match(r'(hello)?,[a-z]{2}(?(1)[a-z]{5})', 'hello,python')
print("是,否,否,——:", result)

result = re.match(r'(hello)?,[a-z]{2}(?(1)[a-z]{6})|[a-z]{2}', 'hello,python')
print("是,否,是,是:", result)

result = re.match(r'(hello)?,[a-z]{2}(?(1)[a-z]{6})|[a-z]{6}', 'hello,python')
print("是,否,是,否:", result)

print("-----group匹配长度等于0-----")
result = re.match(r'(hello)?,[a-z]{2}(?(1)[a-z]{7}|[a-z]{2})', ',python')
print("否,任意,是,是:", result)

result = re.match(r'(hello)?,[a-z]{2}(?(1)[a-z]{3}|[a-z]{7})', ',python')
print("否,任意,是,否:", result)

result = re.match(r'(hello)?,[a-z]{2}(?(1)[a-z]{7})', ',python')
print("否,任意,否,——:", result)

----------------------
输出:
-----group匹配长度大于0-----
是,是,任意,任意: <re.Match object; span=(0, 10), match='hello,pyth'>
是,否,否,——: None
是,否,是,是: <re.Match object; span=(0, 2), match='he'>
是,否,是,否: None
-----group匹配长度等于0-----
否,任意,是,是: <re.Match object; span=(0, 5), match=',pyth'>
否,任意,是,否: None
否,任意,否,——: <re.Match object; span=(0, 3), match=',py'>



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值