本文共 1548 字,大约阅读时间需要 5 分钟。
import re
^
.
就是一个英文的句号
*
示例
line = "tpr123"regex_str = "^t.*"if re.match(regex_str, line): print("匹配成功")
结果
D:\pythonworkspace\regexp\venv\Scripts\python.exe D:/pythonworkspace/regexp/test/test.py匹配成功
$
示例
line = "tpr123"regex_str = "^t.*3$"if re.match(regex_str, line): print("匹配成功")
结果
D:\pythonworkspace\regexp\venv\Scripts\python.exe D:/pythonworkspace/regexp/test/test.py匹配成功
示例
line = "tpr123"regex_str = "^t.*4$"if re.match(regex_str, line): print("匹配成功")
无结果
?
示例:有一个字符串”line = “tpyyyyyyyppr123” 把 pyyyyyyyp取来出。使用正则表达式的方式。
错误示例:
line = "tpyyyyyyyppr123"regex_str = ".*(p.*p).*"match_result = re.match(regex_str, line)if match_result: print(match_result.group(1))
运行结果
D:\pythonworkspace\regexp\venv\Scripts\python.exe D:/pythonworkspace/regexp/test/test.pypp
原因: 正则表达式在匹配的时候是贪婪匹配的,是从字符串的右边开始对比字符串是否符合正则表达式。 因此取出来的就是pp。下面我们要做的就是让他从左右取出来。
示例 :
import reline = "tpyyyyyyyppr123"regex_str = ".*?(p.*p).*"match_result = re.match(regex_str, line)if match_result: print(match_result.group(1))
运行结果
D:\pythonworkspace\regexp\venv\Scripts\python.exe D:/pythonworkspace/regexp/test/test.pypyyyyyyypp
结果还是不符合要求,他把结尾的两个p都取出来了。 是因为 .*p
这个正则也是符合yyyypp的。如果有三个p 也都会匹配出来。
示例
import reline = "tpyyyyyyypppr123"regex_str = ".*?(p.*?p).*"match_result = re.match(regex_str, line)if match_result: print(match_result.group(1))
运行结果
D:\pythonworkspace\regexp\venv\Scripts\python.exe D:/pythonworkspace/regexp/test/test.pypyyyyyyyp
这样结果就符合我们的要求了。
? 的非贪婪模式不只是能把匹配从右开始,还能把当匹配到第一个符合要求的值匹配出来。 就不会在接着匹配了。转载地址:http://pdkws.baihongyu.com/