正则表达式


1 简介/动机

正则表达式 :为高级的文本模式匹配、抽取、与/或文本形式的搜索和替换功能提供了基础。
Python 通过标准的re模块来支持正则表达式。

注意:此处我们提到的搜索和匹配意义不一样

你的第一个正则表达式

正则表达式 匹配的字符串
foo foo
Python Python
abc123 abc123
666 666

2 符号和字符

元字符 赋予正则表达式强大的功能和灵活性。

举例

表示法 描述 正则表达式示例
literal 匹配文本字符串的字面值literal fool
re1/re2 匹配正则表达式re1或者re2 fool/bar
. 匹配任何字符(除\n) b.b
^ 匹配字符串起始部分 ^Dear
$ 匹配字符串终止部分 /bin/*sh$
* 匹配0次或多次前面出现的表达式 [A-Za-z0-9]*
+ 匹配1次或者多次前面出现的正则表达式 [a-z]+.com
? 匹配0次或者1次前面出现的正则表达式 gool?
{N} 匹配N次前面出现的表达式 [0-9]{3}
{M,N} 匹配M~N次前面出现的正则表达式 [0-9]{5,9}
[...] 匹配来自字符集任意单一字符 [aeiou]
[..x-y..] 匹配x-y范围中的任意单一字符 [0-9],[A-Za-z]
[^...] 不匹配此字符集出现的任意一个字符 [aeiou][A-Za-z]
(*|+|?|{})? 用于匹配上面频繁出现符号的非贪婪版本 .*?[a-z]
(...) 匹配封闭式的正则表达式,然后另存为子组 ([0-9]{3})?,f(oo|u)bar
\d 匹配任何十进制数字,\D与之相反 data\d+.txt
\w 匹配任何字母数字字符,\W与之相反 [A-Za-z
\s 匹配任何空格字符,与[\n\t\r\v\f]相同(\S与之相反) of\sthe
\b 匹配任何单词边界(\B与之相反) \bThe\b
\N 匹配已保存的子组 N (参见上面的(...) price:\16
\c 逐字匹配任何特殊字符c \.,\*
A(\Z) 匹配字符串的起始(结束) \ADear

2.1 使用择一匹配符号匹配多个正则表达式模式

择一匹配的管道符号(|)表示从”从多个模式选择其一的操作

正则表达式模式 匹配的字符串
at | home at、home
r2d2 | \c3po r2d2、c3po
bat | bet | bit bat、bet、bit

择一匹配符号(|) 也称作并(union)或逻辑或(logical OR)

2.2 匹配任意单个字符

点号(.)匹配除了换行符(\n)以外的任意字符。

注意:匹配句点或者句号,必须使用反斜杠转义句点符号的功能(\.)

2.3 从字符串起始或者结尾或者单词边界匹配

匹配字符串的开始位置:^、\A
匹配字符串的末尾位置:$、\Z

注意:匹配一个字符串(^Subject:hi$)

匹配一个单词的边界:\b, \B

注意:\bthe表示任何以the为起始的字符串
\Bthe表示任何包含但不以the为起始的字符串

2.4 创建字符集

[ ] 用来创建特定字符集,它的功能类似 |,例如[ab] = a | b

注意:[ab][c] 匹配 ac 或 bc, 不同于 ab | c

2.5 限定范围和否定

除了单字符以外,字符集还支持匹配指定的字符范围,涉及连字符(-)和脱字符(^)。

注意:[a-z]表示a-z任意一个;[^aeiou]表示一个非元音字符

2.6 使用闭包操作符实现存在性和频数匹配

闭包操作符:*、+

注意:贪婪匹配时默认匹配尽可能多字符,闭包操作符是贪婪的,?是非贪婪的

2.7 表示字符集的特殊字符

特殊字符也可以表示字符集,例如 \d 表示 [0-9],\w 表示 [A-Za-z0-9]等。

注意:这些特殊字符的大写表示意义恰恰相反,表不匹配

2.8 使用圆括号指定分组

圆括号的两个功能:

  1. 对正则表达式进行分组
  2. 匹配子组

注意:匹配子组是为了看到匹配表达模式的字符串各部分内容,例如,(\w+)-(\d+)可以分别访问每一个子组

2.9 扩展表示法

扩展表示法的模式:(?p )表一个分组

注意:扩展表示法往往表条件,例如,(?=.com) 表示如果后面跟着 ".com" 才做匹配操作


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM