使用正则表达式首先得导入re模块
字符 | 意义 |
---|---|
\d | 0-9的任何数字 |
\D | 除了0-9的任何字符 |
\w | 任何字母、数字或下划线字符 |
\W | 出字母、数字和下划线意外的任何字符 |
\s | 空格、制表符或换行符,可以认为是空白的这类符号 |
\S | 除空格、制表符或换行符的任何字符 |
r | 忽略转义字符,如想搜索’\d’的时候,直接输入’\d’则认为是数字,r’\d’就OK了 |
| | 类似于‘或’,如’a|b’可以匹配’a’或’b’ |
? | 可选的,如’a(b)?c’,可以匹配abc或则ac |
* | 可以匹配n>=0次,如’a*b’可以匹配’b’,’aab’ |
+ | 可以匹配n>=1次,如’a+b’可以匹配’ab’,’aab’ |
(想匹配的字符){n} | 可以匹配n次,如’(a){3}’可以匹配’aaa’,或者’(a){3,5}’可以匹配(aaa)或者(aaaa)或者(aaaaa) |
? | 非贪婪匹配,如’(a){3,5}?’只匹配(aaa) |
^ | 两种情况,在’[^abc]’这样的括号中,表示除了’abc’、’acb’、’bac’等外的;’^abc’表示以’abc’开始的,如’^a’,可以匹配’abc’,但是不匹配’bac’ |
$ | 结束符号,与^的开始符号对应,如’a$’表示以a结尾的,如’zxca’ |
. | 除了换行外的所有字符 |
方法:
①re.compile
将正则表达式编译成一个正则表达式对象。
xxx = re.compile('abc')
②re.search
查找传入的正则表达式对象,但是只返回第一次出现的匹配文本。
>>>xxx.search('abcd,efg,abc')
abc
③re.findall
与search类似,但是返回所有匹配到的文本。
且如果调用在一个没有分组的正则表达式上,如\d\d,则返回一个匹配到的字符串的列表,如[‘12’,’21’];
如果是在一个有分组的正则表达式上,如(\d)(\d),则返回一个串元祖的列表,每个分组对应一个字符串,如[(‘1’,’2’),(‘2’,’1’)
>>>xxx.findall('abcd,efg,abc')
['abc','abc']
④re.I或者re.IGNORECASE
不区分字母大小写
>>>xxx = re.compile('abc',re.I)
>>>xxx.search('AbCdef')
AbC
⑤re.sub(替换前的内容,替换后的内容,要操作的内容,替换个数)
类似于word中的替换功能
>>>re.sub(r'abc', 'efg', 'abcdefg')
efgdefg
⑥re.VERBOSE
忽略空白符及注释,可以写出方便阅读的正则表达式
原:
>>>xxx = re.compile(((\d|\d\))?(\s|\.))
后:
>>>xxx = re.compile('''(
>>> (\d|\d\))? #数字或者数字.
>>> (\s|\.) #空格、制表符或换行符
>>> )''',re.VERBOSE)
⑦join()和split()
插入和分割
>>>xxx = ['a''b''c']
>>>print xxx
['abc']
>>>print ' '.join(xxx) #在每个字符间插入空格,此时返回的类型是字符串
abc #而不是列表
>>>print 'a,b,c'.split(',')#把一个字符串按照逗号隔开
['a', 'b', 'c'] #此时返回一个列表
注:参考了《PYTHON编程快速上手 让繁琐工作自动化》第7章