Skip to content

正则

初学正则,不要一次记太多规则。先会「在一段文字里找某种样子的内容」。

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 和这几个符号练熟。