python3正则表达式前向、后向断⾔详解,附实例这段时间因项⽬需要⽤正则表达式,初始打算花两三个⼩时学习⼀下,结果经过3天疯狂度娘,敲代码验证,终于拿下。期间发现⽹上资料对于python3正则表达式前向、后向断⾔语焉不详,故整理成⽂分享。
>>前向断⾔
前向断⾔可以分为前向肯定断⾔和前向否定断⾔两种形式,属于零宽断⾔。
>>前向肯定断⾔:(?=...)
符号...表⽰包含的⼦组正则表达式。前向肯定断⾔⼀般使⽤格式如下:
表达式⼀(?<=⼦组表达式)表达式⼆
表达式⼀可选,对前向肯定断⾔没有影响。⾸先匹配后⾯的表达式⼆捕获内容⼆,然后⽤⼦组表达式从开始位置匹配内容⼆(相当于⼦组表达式前⾯固定添加^),如果匹配成功,则断⾔成功,否则断⾔失败。断⾔成功整条表达式返回成功。断⾔失败整条表达式返回失败。
⽰例执⾏结果注释
search(r'(?=abc)abc',"fishc@abcch")span=(6, 9), match='abc'
search(r'@(?=abc)abcch',"fishc@abcch")span=(5, 11), match='@abcch'
search(r'(?=abc)@abc',"fishc@abcch")None
search(r'fishc@abc(?=abc)ch',"fishc@abcch")None
search(r'(?=.abc)@abc',"fishc@abcch")span=(5, 9), match='@abc'
search(r'fishc@(?=abc)',"fishc@abcch")span=(0, 6), match='fishc@'没有表达式⼆断⾔结果依赖于
实现,应避免
search(r'fish(?=abc)',"fishc@abcch")None
search(r'(?=abc)',"fishc@abcch")span=(6, 6), match=''
>>前向否定断⾔:(?!...)
符号...表⽰包含的⼦组正则表达式。前向否定断⾔⼀般使⽤格式如下:
表达式⼀(?<=⼦组表达式)表达式⼆
表达式⼀可选,对前向否定断⾔没有影响。⾸先匹配后⾯的表达式⼆捕获内容⼆,然后⽤⼦组表达式从开始位置匹配内容⼆(相当于⼦组表达式前⾯固定添加^),如果匹配成功,则断⾔失败,否则断⾔成功。断⾔成功整条表达式返回成功。断⾔失败整条表达式返回失败。
⽰例执⾏结果注释
search(r'(?!abc)@abc',"fishc@abcch")span=(5, 9), match='@abc'
search(r'fishc@abc(?=abc)ch',"fishc@abcch")span=(0, 11), match='fishc@abcch'
search(r'(?!abc)abc',"fishc@abcch")None
search(r'@(?!abc)abcch',"fishc@abcch")None
search(r'fishc@(?!abc)',"fishc@abcch")None没有表达式⼆断⾔结
果依赖于实现,应避match(r'fishc@(?!abc)',"fishc@abcch")None
免
search(r'(?!abc)',"fishc@abcch")span=(0, 0), match=''
>>后向断⾔
后向断⾔可以分为后向肯定断⾔和后向否定断⾔两种形式,属于零宽断⾔。
>>后向肯定断⾔:(?<=...)
符号...表⽰包含的⼦组正则表达式。后向肯定断⾔⼀般使⽤格式如下:
表达式⼀(?<=⼦组表达式)表达式⼆
⾸先匹配表达式⼀捕获内容⼀,然后⽤⼦组表达式从结束位置匹配内容⼀(相当于⼦组表达式后⾯固定添加$),如果匹配成功,则断⾔成功,否则断⾔失败。断⾔成功如果有表达式⼆则执⾏表达式⼆,如果没有整条表达式返回成功。如果断⾔失败,则整条表达式返回失败。
⽰例执⾏结果注释
search(r'fishc@abc(?<=abc)',"fishc@abcch")span=(0, 9), match='fishc@abc'
search(r'fishc@abcch(?<=abc)',"fishc@abcch"None 表达式⼀捕获的内容’fishc@abcch’包含
的’abc’没有在结束位置
search(r'fishc@(?<=abc)abc',"fishc@abcch")None 表达式⼀捕获的内容’
fishc@’没有包含的’abc’
python正则表达式不包含search(r'fishc@abc(?<=abc)ch',"fishc@abcch"span=(0, 11), match='fishc@abcch'
search(r'(?<=abc)abc',"fishc@abcch")None没有表达式⼀断⾔结果依赖于
实现,应避免
search(r'(?<=abc)ch',"fishc@abcch")span=(9, 11), match='ch'
search(r'(?<=abc)',"fishc@abcch")span=(9, 9), match=''
>>后向否定断⾔:(?<!...)
符号...表⽰包含的⼦组正则表达式。后向否定断⾔⼀般使⽤格式如下:
表达式⼀(?<=⼦组表达式)表达式⼆
⾸先匹配表达式⼀捕获内容⼀,然后⽤⼦组表达式从结束位置匹配内容⼀(相当于⼦组表达式后⾯固
定添加$),如果匹配成功,则断⾔失败,否则断⾔成功。断⾔成功如果有表达式⼆则执⾏表达式⼆,如果没有整条表达式返回成功。如果断⾔失败,则整条表达式返回失败。
⽰例执⾏结果注释
src=re.search(r'fishc@abcch(?<!abc)',"fishc@abcch")span=(0, 11), match='fishc@abcch'
search(r'fishc@(?<!abc)abc',"fishc@abcch")span=(0, 9), match='fishc@abc'
search(r'fishc@abc(?<!abc)',"fishc@abcch")None
search(r'fishc@abc(?<!abc)ch',"fishc@abcch")None
search(r'(?<!abc)abcch',"fishc@abcch")span=(6, 11), match='abcch'没有表达式⼀断⾔结
果依赖于实现,应避
免
search(r'(?<!abc)shc',"fishc@aabcch")span=(2, 5), match='shc'
search(r'(?<!abc)',"fishc@abcch")span=(0, 0), match=''
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论