正则表达式

表示法 描述 示例
literal 匹配字符串字面值 foo
re1|re2 匹配正则表达式re1或者re2 foo|bar
^ 匹配字符串的起始部分 ^Dear
$ 匹配字符串的结尾部分 [a-z]+.com$
. 匹配任一单一字符(除了 之外) b.b
* 匹配前面出现的正则表达式0次或多次 .*
匹配前面出现的正则表达式0次或1次 .?
+ 匹配前面出现的正则表达式1次或多次 [a-z]+.com
大括号{}
{N} 匹配N次前面出现的正则表达式 [0-9]{4}
{M,N} 匹配M~N次前面出现的正则表达式 [0-9]{4,9}
中括号[]
[...] 形成一个字符集,匹配字符集内任意一个字符 [mynameis]
[x-y] 形成一个字符集,匹配x-y之间的任意字符 [0-9]、[a-z]
[^...] 形成一个字符集,且不匹配字符集中任意字符 [^0-9]
小括号()
(...) 匹配封闭的正则表达式,并另存为子组 ([0-9]{3})
(?:exp) 匹配exp
(?=exp) 匹配exp前面的位置;
这是一个非获取匹配,该匹配不需要获取供以后使用
Windows(?=95|98|NT|2000)
特殊字符
d 匹配任何十进制数字,和[0-9]一致 datad+.txt
D 与d相反,与[^0-9]一致 dataD+.txt
w 匹配任何字母数字字符,和[a-zA-Z0-9]一致
W 与w相反
s 匹配任何空格字符,和[ vf]一致
S 与s相反
 匹配任何单词边界 The
B 与相反 BTheB

python与正则表达式

  1. 使用match() 方法匹配字符串

    • match()函数试图从字符串的起始部分对模式进行匹配。如果匹配成功,就返回一个匹配对象,失败就返回None
      • 返回:匹配对象
      • 注意: match('foo', 'afooa')并不会匹配成功,因为匹配正则表达式并不在字符串的起始部分
      • 这也就意味着,match()方法只会匹配一个结果
  2. 使用search() 方法查找(搜索)字符串

    • search()函数在字符串的任一位置对给定的正则表达式模式搜索第一次出现的匹配情况
      • 返回:匹配对象
      • 注意: search('foo', 'afooafoo')只会匹配一次
  3. 使用findall() 方法和finditer() 方法查找每一次出现的位置

    • findall()查询字符串中某个正则表达式全部的非重复出现情况

      • 返回:列表。匹配成功时返回所有匹配部分列表,匹配失败时返回空列表
      • findall()不使用分组时,返回匹配的绝对内容的列表,如:
        • re.findall(r'thw+ and thw+', 'This and that', re.I)
          • ['This and that', 'they and Them']
      • 使用分组时,返回分组元组的列表
        • re.findall(r'(thw+) and (thw+)', 'This and that they and Them', re.I)
          • [('This', 'that'), ('they', 'Them')]
    • finditer()与findall()类似,前者返回iter类型,更节省内存

  4. 使用sub()subn() 方法搜索和替换

    • 使用方法:
      • re.subsubn(origin_regex, replaced_regex, string)
    • 前者返回替换后的字符串,后者返回替换后的字符串和替换总数组成的元组
    • re.sub('X', 'Mr, Smith', 'Hi, X Dear, X')
      • 'Hi, Mr, Smith Dear, Mr, Smith'
    • re.subn('X', 'Mr, Smith', 'Hi, X Dear, X')
      • ('Hi, Mr, Smith Dear, Mr, Smith', 2)
原文地址:https://www.cnblogs.com/liushi-Oscar/p/9619516.html