> 文章列表 > Python——正则表达式re讲解

Python——正则表达式re讲解

Python——正则表达式re讲解

Python——正则表达式re讲解

文章目录

  • Python——正则表达式re讲解
    • 正则表达式语法
    • re模块
      • 标志常量
        • re.IGNORECASE
      • 函数
        • p a t t e r n r e . c o m p i l e ( p a t t e r n , f l a g s = 0 ) pattern re.compile(pattern, flags=0) patternre.compile(pattern,flags=0)
        • M a t c h r e . s e a r c h ( p a t t e r n , s t r i n g , f l a g s = 0 ) Match re.search(pattern, string, flags=0) Matchre.search(pattern,string,flags=0)
        • M a t c h r e . m a t c h ( p a t t e r n , s t r i n g , f l a g s = 0 ) Match re.match(pattern, string, flags=0) Matchre.match(pattern,string,flags=0)
      • 匹配对象
        • 属性和方法
          • Match.group([group1, ...])
          • M a t c h . s t a r t ( [ g r o u p ] ) , M a t c h . e n d ( [ g r o u p ] ) Match.start([group]),Match.end([group]) Match.start([group])Match.end([group])
          • M a t c h . s p a n ( [ g r o u p ] ) Match.span([group]) Match.span([group])

正则表达式语法

正则表达式(或 RE)指定了一组与之匹配的字符串;模块内的函数可以检查某个字符串是否与给定的正则表达式匹配(或者正则表达式是否匹配到字符串,这两种说法含义相同)。

元字符

.

匹配除了换行符以外的任意字符

?

匹配前面的字符0次或1次(可以用于取消贪婪模式)

*

匹配前面的字符0次或多次

+

匹配前面的字符1次或多次

{}

{m}:匹配前面的字符恰好出现m次
{m,}:匹配前面的字符至少出现m次
{m,n}:匹配前面的字符出现m到n次
{,n}: 匹配前面的字符至多出现n次

()

():将括号内的字符作为一组
|:匹配左右两边任意一个字符

[ ]

两个元字符用于指定一个字符类,也就是你希望匹配的字符的一个集合。这些字符可以单独地列出,也可以用字符范围来表示(给出两个字符并用 ‘-’ 分隔)。例如,[abc] 将匹配 a、b、c 之中的任意一个字符;这与 [a-c] 相同,后者使用一个范围来表达相同的字符集合。如果只想匹配小写字母,则正则表达式将是 [a-z] 。
^
通过对集合 取反 来匹配字符类中未列出的字符

re模块

标志常量

re.IGNORECASE

进行忽略大小写匹配;表达式如 [A-Z] 也会匹配小写字符。
用法:将re模块中函数的flags参数赋值为re.IGNORECASE
例:

re.compile(pattern, flags=re.IGNORECASE)

函数

p a t t e r n r e . c o m p i l e ( p a t t e r n , f l a g s = 0 ) pattern re.compile(pattern, flags=0) patternre.compile(pattern,flags=0)

将正则表达式的样式编译为一个 正则表达式对象 (正则对象),可以用于匹配,通过这个对象的方法 match(), search()

M a t c h r e . s e a r c h ( p a t t e r n , s t r i n g , f l a g s = 0 ) Match re.search(pattern, string, flags=0) Matchre.search(pattern,string,flags=0)

扫描整个 字符串 找到匹配样式的第一个位置,并返回一个相应的 匹配对象。如果没有匹配,就返回一个 None ; 注意这和找到一个零长度匹配是不同的。

M a t c h r e . m a t c h ( p a t t e r n , s t r i n g , f l a g s = 0 ) Match re.match(pattern, string, flags=0) Matchre.match(pattern,string,flags=0)

如果 string 开始的0或者多个字符匹配到了正则表达式样式,就返回一个相应的 匹配对象 。 如果没有匹配,就返回 None ;注意它跟零长度匹配是不同的。

匹配对象

匹配对象总是有一个布尔值 True。如果没有匹配的话 match() 和 search() 返回 None 所以你可以简单的用 if 语句来判断是否匹配

match = re.search(pattern, string)
if match:process(match)

属性和方法

Match.group([group1, …])

返回一个或者多个匹配的子组。如果只有一个参数,结果就是一个字符串,如果有多个参数,结果就是一个元组(每个参数对应一个项),如果没有参数,组1默认到0(整个匹配都被返回)。 如果一个组N 参数值为 0,相应的返回值就是整个匹配字符串;如果它是一个范围 [1…99],结果就是相应的括号组字符串。如果一个组号是负数,或者大于样式中定义的组数,就引发一个 IndexError 异常。如果一个组包含在样式的一部分,并被匹配多次,就返回最后一个匹配。

M a t c h . s t a r t ( [ g r o u p ] ) , M a t c h . e n d ( [ g r o u p ] ) Match.start([group]),Match.end([group]) Match.start([group])Match.end([group])

返回 group 匹配到的字串的开始和结束标号。group 默认为0(意思是整个匹配的子串)。如果 group 存在,但未产生匹配,就返回 -1 。对于一个匹配对象 m, 和一个未参与匹配的组 g ,组 g (等价于 m.group(g))产生的匹配是

m.string[m.start(g):m.end(g)]
M a t c h . s p a n ( [ g r o u p ] ) Match.span([group]) Match.span([group])

对于一个匹配 m , 返回一个二元组 (m.start(group), m.end(group)) 。 注意如果 group 没有在这个匹配中,就返回 (-1, -1) 。group 默认为0,就是整个匹配。