首页 > 代码库 > 正则表达式学习(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用于替换字符串中的匹配项。
下面一个例子将字符串中的空格 ‘ ‘ 替换成 ‘-‘ :
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模块)