正则表达式

0 基本知识

0.1 匹配(match)
0.2 捕获(capture)
0.3 替换(replace)
  • 获取特征对象
      pattern = re.compile("\\s+")
  • 匹配目标字符串
      match = pattern.match("hello world")

1 贪婪模式和非贪婪模式

1.1 概念解释

在整个表达式匹配成功的前提下:
贪婪模式:尽可能多的匹配(.*)--(来者不拒)
非贪婪模式:尽可能少的匹配(.*?)--(见好就收)
Python中数量词默认是贪婪模式

1.2 代码示例

import re
s = "aaabc11123aaabc"
# print(s)

pattern_1 = re.compile('a.*?b')
match_1 = pattern_1.findall(s)
print(match_1)   # 结果为 ['aaab', 'aaab']

pattern_2 = re.compile('a.*b')
match_2 = pattern_2.findall(s)
print(match_2)    # 结果为 ['aaabc11123aaab']

(1)a.*?b,非贪婪模式
  代表从a开始,碰到第一个b即为结束,下一匹配又是以a开始,以b结束的特征字串。所以匹配到两个结果;
(2)a.*b,贪婪模式
  代表从a开始,一直往下匹配,直到最后一个b结束

2 不同括号,不同含义

  • []----字符集
  • {n}---数量,n次
  • ()----分组,一个括号对代表一组
    ([a-z0-9]{3}) ([A-Z]+),前一组为连续的三个小写字母或数字字符(可混),后一组为一个或多个连续的大写字母。注意,两组中间有个空格,说明这两组只能匹配两个字符串。

3 匹配中文

Unicode字符集中,中文大多数位于[\\u4e00-\\u9fa5],要匹配中文,注意将源字符串,(要查找的内容)为Unicode编码,如s = u"服了you"

一些小东西

1. compile(re.*)

  • pattern = re.compile('\[a-z]+',re.I)
    (大写的 i),表示忽略大小写

  • pattern = re.compile('\[a-z]+',re.S)
    表示将源字符串按一个整体进行匹配,而不是一次只匹配一行

你可能感兴趣的:(正则表达式)