什么网站有加工外发做的,网页设计实训报告摘要怎么写,天津武清网站建设,dede网站如何换源码最近因为一些原因频繁使用正则表达式#xff0c;因为以前系统整理过关于正则表达式的相关知识#xff0c;所以这里仅记录使用期间遇到的问题。 本文内容基于re包 1. match和search方法的区别 在Python中#xff0c;re.search和re.match都是用于匹配字符串的正则表达式函数因为以前系统整理过关于正则表达式的相关知识所以这里仅记录使用期间遇到的问题。 本文内容基于re包 1. match和search方法的区别 在Python中re.search和re.match都是用于匹配字符串的正则表达式函数但二者在匹配模式上有明显的区别。具体如下
re.match: 该函数只在字符串的开始位置进行匹配。如果开头不匹配就不会继续匹配下去。其作用类似于从字符串的开位置起寻找能找到符合正则表达式模式的子串。re.search: 该函数会在整个字符串中搜索直到找到一个匹配的子字符串。其作用类似于从完整的字符串中找到与正则表达式完整匹配的子串。
代码举例如下
import re
ruler(ab|cd).*(ef|gh) #以ab或cd开头以ef或gh结尾的字符串
str1abef
str2dcabefabef
str3abxyefabstefsc
print(re.match(rule,str1))
print(re.match(rule,str2))
print(re.match(rule,str3))
print(re.search(rule,str1))
print(re.search(rule,str2))
print(re.search(rule,str3)) 其代码执行结果如下
re.Match object; span(0, 4), matchabef
None
re.Match object; span(0, 12), matchabxyefabstef
re.Match object; span(0, 4), matchabef
re.Match object; span(2, 10), matchabefabef
re.Match object; span(0, 12), matchabxyefabstef从执行结果中可以发现这两个方法的返回类型是一样的。 另外使用^和$可以验证完整的字符串是否符合正则表达式规定的模式。具体举例如下
ruler^(ab|cd).*(ef|gh)$ #以ab或cd开头以ef或gh结尾的字符串
str1abef
str2dcabefabef
print(re.match(rule,str1))
print(re.match(rule,str2))
print(re.search(rule,str1))
print(re.search(rule,str2))其执行结果如下
re.Match object; span(0, 4), matchabef
None
re.Match object; span(0, 4), matchabef
None2. 利用正则表达式实现某些字符必须出现某些字符不能出现的效果 组合使用零宽断言可以实现利用利用正则表达式实现某些字符必须出现某些字符不能出现的效果。具体举例如下
ruler^(?.*(ab|cd))(?!.*xy).*$ #ab或cd必须出现且不能包含xy
str1132ab23re
str2sefeabsefewxyseid
str3xyseqeqabprint(re.match(rule,str1))
print(re.match(rule,str2))
print(re.match(rule,str3))其结果如下
re.Match object; span(0, 9), match132ab23re
None
None但是在使用这种方式的时候要注意一点(ab|cd)的后面不要添加.*, 这个需要放到xy的前面否则实现不了同样的效果展示如下
import reruler^(?.*(ab|cd).*)(?!xy)$
str1132ab23re
str2sefeabsefewxyseid
str3xyseqeqabprint(re.match(rule,str1))
print(re.match(rule,str2))
print(re.match(rule,str3))其执行结果如下
None
None
None从结果中我们可以看到str1和str2是符合要求但结果并没有匹配上。 另外在这种情况下^和$的使用也需要注意如果不添加这两种断言结果可能也是错误的。展示如下
import reruler(?.*(ab|cd))(?!.*xy)
str1132ab23re
str2sefeabsefewxyseid
str3xyseqeqabprint(re.match(rule,str1))
print(re.match(rule,str2))
print(re.match(rule,str3))其结果如下
re.Match object; span(0, 0), match
None
None