正则
初学正则,不要一次记太多规则。先会「在一段文字里找某种样子的内容」。
import re
res = re.findall("l", "hello , world")
print(res)
['l', 'l', 'l']
这是在 "hello , world" 里找出所有的 l。
常用匹配符号
.匹配任意一个字符\d匹配一个数字\w匹配一个数字或字母
print(re.findall("o.", "good morning"))
['oo', 'or']
o. 表示 o 后面再跟任意一个字符。
print(re.findall(r"\d\d", "qq:12345,phone:323"))
print(re.findall(r"\w\w", "qq:12345,phone:323"))
['12', '34', '32']
['qq', '12', '34', 'ph', 'on', '32']
建议写成原始字符串 r"...",避免反斜杠被 Python 先吃掉。
12345 里最后的 5 后面没有数字了,所以按两位数字匹配时剩不下它。
个数
*:0 个或多个+:1 个或多个?:0 个或 1 个
print(re.findall(r":\d*", "qq:12345"))
print(re.findall(r":\d*", "qq:"))
[':12345']
[':']
* 允许数字一个都没有,所以单独的 : 也能匹配上。
print(re.findall(r":\d+", "qq:12345"))
print(re.findall(r":\d+", "qq:"))
[':12345']
[]
+ 至少要有 1 个数字。
print(re.findall(r":\d?", "qq:12345"))
print(re.findall(r":\d?", "qq:"))
[':1']
[':']
? 最多再跟 1 个数字。
处理公告、交易流水、不规则文本时会用到正则。入门先把 findall 和这几个符号练熟。