[Python] 正则表达式re

版权声明:本文为博主原创文章,若有错误之处望大家批评指正!转载需附上原文链接,谢谢! https://blog.csdn.net/summer_dew/article/details/86577226

【资源】

  1. 官方说明:help(re) #命令行查看官方解释
  2. 可视化正则表达式
  3. 教程

【特殊字符】

常用 功能 说明
“^” 开头 “^x”,以x字符开头
“$” 结尾 “x$”,以x字符结尾
“.” 任意字符(≥0)
“()” 提取子串 math_obj.group(1) #匹配成功后,拿出第一个括号里的子串
“?” 非贪婪匹配 详细说明
“|” 或者
“[]” 1. 中括号里的任意一个
2. 可以用区间
3. 中括号里的^代表非
4. 中括号里的字符没有特殊意义
1. "[abcd]"
2. "[0-9a-z]"
3. “[^1]“表示≠1
4. “[.*]”,表示字符”.*”,不表示任意字符并重复多次

【字符】

名称 说明
“\s” 空格
“\S” 与"\s"相反,只要不是空格都可以
“\w” 为任意字符,等同于[A-Za-z0-9_]
“\W” 与"\w"相反,不为A-Z、a-z、0-9
“[\u4E00-\u9FA5]” 汉字
“\d” 数字

【出现次数】

名称 功能 说明
“*” 重复次数 “x*”,x可以重复任意多次(x出现≥0次)
“+” 至少一次 “x+”,x至少出现一次
“{2}” 出现次数 “x{2}”,x出现2次
“{2, }” 出现次数 “x{2,},x出现2次以上”
“{2,5}” 出现次数 “x{2,5}”,x出现2-5次

【贪心Greedy】将匹配尽可能多的重复
【非贪婪模式】"?()":()里的字符从右往左第一个

>>> import re
>>> line = "texttexttteexxxtt"
# 模式串".*(t.*t).*"
	# 【猜想】满足条件的所有可能:
		# 'texttexttteexxxtt'
		# 'ttexttteexxxtt'
		# 'texttteexxxtt'
		# 'ttteexxxtt'
		# 'tteexxxtt'
		# 'teexxxtt'
		# 'tt'
		# 't'
		# 'tt'
		# 'texttexttteexxxt'
		# 'texttexttt'
		# 'texttextt'
		# 'texttext'
		# 'textt'
		# 'text'
>>> match_obj = re.match(".*(t.*t).*", line) #默认贪婪
>>> match_obj.group(1)
'tt'
>>> match_obj = re.match(".*?(t.*t).*", line) #左边界非贪婪
>>> match_obj.group(1)
'texttexttteexxxtt'
>>> match_obj = re.match(".*(t.*t?).*", line) #右边界非贪婪
>>> match_obj.group(1)
't'
>>> match_obj = re.match(".*?(t.*t?).*", line) #左右边界非贪婪
>>> match_obj.group(1)
'texttexttteexxxtt'

例子

【提取年月日】 "(\d{4}[年/-]\d{1,2}([月/-]\d{1,2}|[月/-]$|$))"

line = "2001年6月1日"
line = "2001/6/1"
line = "2001-6-1"
line = "2001-06-01"
line = "2001-06"

猜你喜欢

转载自blog.csdn.net/summer_dew/article/details/86577226