标签:匹配 name no 示例 id 正则 yes hello
逻辑总结
'(?(id/name)yes|no)', 此正则一般用于前面已经划分了gourp的情况。id和name是gourp的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("-----gourp匹配长度大于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("-----gourp匹配长度等于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)
----------------------
输出:
-----gourp匹配长度大于0-----
是,是,任意,任意: <re.Match object; span=(0, 10), match='hello,pyth'>
是,否,否,——: None
是,否,是,是: <re.Match object; span=(0, 2), match='he'>
是,否,是,否: None
-----gourp匹配长度等于0-----
否,任意,是,是: <re.Match object; span=(0, 5), match=',pyth'>
否,任意,是,否: None
否,任意,否,——: <re.Match object; span=(0, 3), match=',py'>
标签:匹配,name,no,示例,id,正则,yes,hello 来源: https://blog.csdn.net/qq522044637/article/details/122741166
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。