python—正则表达式

python——正则表达式

定义

正则表达式使用某种预定义的模式去匹配一类具有共同特征的字符串,主要用于处理字符串,可以快速、准确地完成复杂的查找、替换等处理要求。

构成

元字符 功能说明
. 匹配除换行符以外的任意单个字符
* 匹配位于*之前的字符或子模式的0次或多次出现
+ 匹配位于+之前的字符或子模式的1次或多次出现
- 在[]之内用来表示范围
| 匹配位于|之前的或之后的字符
^ 匹配行首,匹配以^后面的字符开头的字符串
$ 匹配行尾,匹配位于$之前的字符结束的字符换
匹配位于?之前的0个或1个字符。当此字符紧随任何其他限定符(*、+、?、{n}、 {n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o
\ 表示位于\之后的为转移字符
\num 此处num是一个正整数,表示子模式的编码
\f 换页符匹配
\n 换行符匹配
\r 匹配一个回车符
\b 匹配单词头或单词尾
\B 与\b含义相反
\d 匹配任何数字,相当于[0-9]
\D 与\d含义相反,等效于[ ^0-9]
\s 匹配任意空白字符,包括空格、制表符、换行符,与[\f\n\r\t\v]等效
\S 与\s相反
\w 匹配任何字母、数字以及下划线,相当于[ a-zA-Z0-9]
\W 与\w含义相反
() 将位于()内的内容作为一个整体
{m,n} 位于{前的字符或子模式重复至少m次,至多n次
[] 表示范围,匹配位于[]中的任意一个字符
[^xyz] 反向字符集,匹配出xyz以外的任意字符
[a-z]
[^a-z]

举例

^和$

“^”代表字符串的开头

“$”代表字符串的结束

表达式:^hi
可匹配:hi,him,hidden等
表达式:hi$
可匹配:hi,adfdfi,sadasdfi等
表达式^hi$
可匹配:hi
[]

[]匹配一堆字符串中的一个[a-z]字符范围,匹配指定范围的任意字符

表达式:^[aeiou]at$
可匹配:aat,eat等
表达式:^[a-z]at$
可匹配:aat,bat等
表达式:^[A-Za-z]at$
可匹配:Aat,Cat,aat等
[^xyz]

反向字符集[ ^xyz] ,匹配除x、y、z之外的任何字符

表达式:[^xyz]
可匹配:c,m,z等
|

分支“|”用来指定几个规则只要匹配一个规则即成匹配。

表达式:^com$|^org$|^net$
可匹配:com,org,net
表达式:^abc\.(com|org|net)$
可匹配:abc.com ,abc.org,abc.net
()

“( )”可以指定一堆字符来匹配一个模式。又称为子模式

表达式:^(very )*large$
可匹配:large,very large,very very large等
+

“+”表示前一字符模式可以被重复1次或n次。

表达式:^go+gle$
可匹配:google,goooogle等
表达式:^g[aeiou]+gle$
可匹配:gagle,gegle等
*

“*”表示前一字符模式可以被重复0次或n次。

表达式:^go*gle$
可匹配:ggle,google,gooooooooooogle
重复符号“{x,}”

“{x,}”表示前一字符模式可以被重复至少x次。

表达式:^go{2,}gle$
可匹配:google gooogle goooogle
重复符号“{x,y}”

“{x,y}”表示前一字符模式可以被重复x到y次。

表达式: ^go{2,4}gle$
能匹配的字符串(仅3个):google gooogle goooogle
限定符

限定符:限定前面的表达式出现的次数

限定符 解释
a* a出现0次或多次
a+ a出现1次或多次
a{6} a出现6次
a{2,6} a出现2-6次
a{2,} a出现两次以上
转义符号“\”
  • 如果要匹配“[” “^” “+” “)”等等有特殊含义的字符,可以用“\”做转义。
  • 如果以“\”开头的元字符与转义字符相同,则需要使用“\”,或者使用原始字符串。在字符串前加上字符r或R之后表示原始字符串,字符串中任意字符都不再进行转义。原始字符串可以减少用户的输入,主要用于正则表达式和文件路径 字符串的情况,但如果字符串以一个斜线“\”结束的话,则需要多写一个斜线,即以“\”结束。
表达式:^1\*\(2\+3\)=6$
可匹配:1*(2+3)=6
\d

匹配任何一个数字,相当于[0-9]。

表达式:^ \d{4}$
可匹配:213134322131等
表达式:^ \d{4}-\d{1,2}-\d{1,2}$
可匹配:2016-1-31
\w

匹配任何一个字母、数字以及下划线,相当于[a-zA-Z0-9_]

表达式:'^(\w){6,20}$'
可匹配:111111
\b

匹配单词头或单词尾,不匹配任何实际字符,表示字母数字与非字母数字的边界,非字母数字与字母数字的边界。

表达式:'\bb.+\b'
可匹配:以b开头的完整单词

举例

  • 最简单的正则表达式是普通字符串,可以匹配自身
  • [a-z A-Z 0-9]可以匹配一个任意大小写字母或数字
  • '^http’只能匹配所有以’http’开头的字符串
  • (pattern)*:允许模式重复0次或多次
  • (pattern)+:允许模式重复1次或多次
  • (pattern){m,n}:允许模式重复m~n次
  • ‘ab{1,}’:等价于’ab+',匹配以字母a开头后面带1个至多个字母b的字符串。
  • [a-zA-Z] {1}([a-zA-Z0-9._]){4,19}$':匹配长度为5-20的字符串,必须以字母开头并且可带字母、数字、“ _ ” 、“.”的字符串。
  • [a-zA-Z]+$':检查给定字符串是否只包含英文字母大小写。
  • ‘^\w+@(\w+.)+\w+$’:检查给定字符串是否为合法电子邮件地址。

re模块

**方法 ** 功能说明
compile(pattern[, flags]) 创建模式对象
escape(string) 将字符串中所有特殊正则表达式字符转义
findall(pattern, string[, flags]) 返回包含字符串中所有与给定模式匹配的项的列表
match(pattern, string[, flags]) 从字符串的开始处匹配模式,返回match对象或None
purge() 清空正则表达式缓存
search(pattern, string[, flags]) 在整个字符串中寻找模式,返回match对象或None
split(pattern, string[, maxsplit=0]) 根据模式匹配项分隔字符串后返回列表
sub(pat, repl, string[, count=0]) 将字符串中所有与pat匹配的项用repl替换,返回新字符串,repl 可以是字符串或返回字符串的可调用对象。
subn(pat, repl, string[, count=0]) 将字符串所有的pat的匹配项用repl替换,返回包含新字符串和替换次数的二元元组,repl可以是字符串或返回字符串的可调用对象
match()

match方法和search方法匹配成功后返回match对象。match对象的主要方法有:

  • group():返回匹配的一个或多个子模式内容
  • groups():返回一个包含匹配的所有子模式内容的元组
  • start():返回指定子模式内容的起始位置,子串第一个字符的索引;
  • end():返回指定子模式内容的结束位置,子串最后一个字符的索引+1;
  • span():返回(start(group), end(group))。

group()返回匹配的一个或多个子模式内容,当要获得整个匹配的子串时,可直接使用 group() 或 group(0)

groups():返回一个包含匹配的所有子模式内容的元组

>>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")
>>> m.group(0) #返回整个模式内容
'Isaac Newton'
>>> m.group(1) #返回第1个子模式内容
'Isaac'
>>> m.group(2) #返回第2个子模式内容.
'Newton'
>>> m.group(1, 2) #返回指定的多个子模式内容
('Isaac', 'Newton')


>>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, physicist")
>>> m.group(0) #返回整个模式内容
'Isaac Newton'
>>> m.group(1) #返回第1个子模式内容
'Isaac'
>>> m.group(2) #返回第2个子模式内容.
'Newton'
>>> m.group(1, 2) #返回指定的多个子模式内容
('Isaac', 'Newton')


你可能感兴趣的:(python,正则表达式,开发语言)