首页 > 代码库 > 正则表达式学习(python之re模块)

正则表达式学习(python之re模块)

      记住正则表达式是件挺头疼的事,但只要归类好,稍加练习就会很好的记住了。。。      

定位符
^              匹配字符串的开始,如^itcast,匹配以"itcast"开头的字符串
$               匹配字符串的结束,如itcast$,匹配以"itcast"结尾的字符串
\b              匹配单词的开始或结束,例如er\b 该表达式表示匹配er和空格之间的位置,如可以匹配"never"中的"er",但不能匹配"verb"中的"er"
\B              匹配非单词边界,与上面\b相反


符号
.               匹配除换行符以外的任意字符
[]              一个方括号代表只匹配一个字符,注意[]内不要有空格,否则会被认为是要匹配一个空格。
[^]           反义字符,例如[^1234567890],匹配除数字以外任意字符。
|               选择字符,这里代表‘或者’
-               连接字符,例如[a-zA-Z],任意一个存在26个字母里的字符都可以匹配,不区分大小写。
\               转义字符,将特殊字符转成普通字符
()              1、改变限定符范围,2、分组。


限定符
*               重复零次或更多次
+              重复一次或更多次
?               重复零次或一次
{n}           重复n次
{n,}          重复n次或更多次
{n,m}       重复n到m次

 

    一般来说,编写正则表达式不要有空格,否则会被认为是要匹配一个空格,或者特殊字符被认为普通字符。

 

re模块

                  pattern: 正则模型

                  repl:要替换的字符串或可执行对象
                  string : 要匹配的字符串
                  count : 指定替换个数,默认为0,表示每个匹配项都替换。
                  flags : 匹配模式,用于控制正则表达式的匹配方式

1、match(pattern, string, flags=0)

从字符串的开始根据正则模型匹配指定内容,匹配单个(只找一个)。

 

2、search(pattern, string, flags=0)

在字符串内根据正则模型匹配指定内容,匹配单个(只找一个),如果字符串没有匹配,则返回None。

 

3、group和groups

groups():表示从group(1)开始往后的所有值,组合成一个元组类型的值;
group():表示取全部匹配的字符串或者指定的组,返回结果是一个字符串;

   注意,如果匹配多次,只有最后一个匹配可以访问,如下代码:

1 m = re.match(r"(..)+", "a1b2c3") 
2 m.group(1) 
3 print m.group(1)

     m.group(1)的返回结果为"c3",而不是"a1"。

 

4、sub(pattern, repl, string, count=0, flags=0)

 re.sub用于替换字符串中的匹配项。                              

下面一个例子将字符串中的空格 ‘ ‘ 替换成 ‘-‘ :  

import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
print re.sub(r‘\s+‘, ‘-‘, text)

re.sub还允许使用函数对匹配项的替换进行复杂的处理。如:re.sub(r‘\s‘, lambda m: ‘[‘ + m.group(0) + ‘]‘, text, 0);将字符串中的空格‘ ‘替换为‘[ ]‘。

 

5、split(pattern, string, maxsplit=0, flags=0)

可以使用re.split来分割字符串,如:re.split(r‘\s+‘, text);将字符串按空格分割成一个单词列表。

注意,在匹配部分加上()之后所切出的结果是不同的,没有()的没有保留所匹配的项,但是有()的却能够保留了匹配的项,如下:

1 >>> m = re.split( ‘\d+’ , ’dkjj23jjjj44’) 
2 >>>print m
3  [‘dkjj’ , ‘jjjj’ , ‘’ ]
1 >>> m = re.split( ‘(\d+)’ , ’dkjj23jjjj44’)             #匹配部分加上()
2 >>>print m
3 [‘dkjj’ , ‘23’ , ‘jjjj’ , ‘44’ , ‘’ ]

 

6、findall(pattern, string, flags=0)

  re.findall可以获取字符串中所有匹配的字符串。如:re.findall(r‘\w*oo\w*‘, text);获取字符串中,包含‘oo‘的所有单词。

 

7、re.compile

  可以把正则表达式编译成一个正则表达式对象。可以把那些经常使用的正则表达式编译成正则表达式对象,这样可以提高一定的效率。下面是一个正则表达式对象的一个例子:

import re
text = "JGood is a handsome boy, he is cool, clever, and so on..."
regex = re.compile(r‘\w*oo\w*‘)
print regex.findall(text)   #查找所有包含‘oo‘的单词
print regex.sub(lambda m: ‘[‘ + m.group(0) + ‘]‘, text) #将字符串中含有‘oo‘的单词用[]括起来。

  

正则表达式学习(python之re模块)