python正则表达式入门一

正则表达式入门导包

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.py
pp

原因: 正则表达式在匹配的时候是贪婪匹配的,是从字符串的右边开始对比字符串是否符合正则表达式。 因此取出来的就是pp。下面我们要做的就是让他从左右取出来。

示例 :

import re

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.py
pyyyyyyypp

结果还是不符合要求,他把结尾的两个p都取出来了。 是因为 .*p这个正则也是符合yyyypp的。如果有三个p 也都会匹配出来。

示例

import re

line = "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.py
pyyyyyyyp

这样结果就符合我们的要求了。
? 的非贪婪模式不只是能把匹配从右开始,还能把当匹配到第一个符合要求的值匹配出来。 就不会在接着匹配了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章