Day: February 17, 2023

正则表达式“正向匹配和反向匹配”的妙用

相信大家在看正则表达式语法的时候都会遇到下面几种:正向肯定,正向否定,反向肯定,反向否定 1、(?=pattern) 正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。 这是一个非获取匹配,该匹配不需要获取供以后使用。 例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”, 但不能匹配“Windows3.1”中的“Windows”。 预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索, 而不是从包含预查的字符之后开始。 2、(?!pattern) 正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。 这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。 例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”, 但不能匹配“Windows2000”中的“Windows”。 3、(?<=pattern) 反向肯定预查,与正向肯定预查类似,只是方向相反。 例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”, 但不能匹配“3.1Windows”中的“Windows”。 4、(?<!pattern) 反向否定预查,与正向否定预查类似,只是方向相反。 例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”, 但不能匹配“2000Windows”中的“Windows”。 我第一次看的时候就觉得很难理解,读了两遍好不容易理解了,但是一直用不上,直到工作需要…………… str = “111/;hkakdhaldladhl;gddhkshls;hhhh” 用 ; 切割字符串,要求切割结果是111/;hkakdhaldladhl gddhkshls hhhh,也就是第一个;前面有/,所以第一个;不分割,只分割后面的; 这其实就用到了反向否定,将python里面的split函数和正则表达式完美结合在一起,大家根据我的例子再去理解正(反)向否(肯)定匹配,肯定就更清晰了 python代码实现: import re str = “111/;hkakdhaldladhl;gddhkshls;hhhh” str_list = re.split(r”(?<!\/);”,str) print(str_list) 结果: […]

blueidea