初学 Python,对 Python 的文字处理能力有很深的印象,除了 str 对象自带的一些方法外,就是正则表达式这个强大的模块了。关于 Python 里面正则表达式的使用网上有很多博文,如 python正则式学习笔记等,这里做一下自己的总结.
基本使用
match方法
```python import re str = 'an example word:cat!!' match = re.search(r'word:\w\w\w', str) # If语句紧跟来检验search()是否成功 if match: print 'found', match.group() ## 找到cat else: print 'did not find' ```
findall方法
```python import re # 在字符串中查找 str = 'purple alice@google.com, blah monkey bob@abc.com blah dishwasher' # 找出str中所有的正规的邮箱 emails = re.findall(r'[\w\.-]+@[\w\.-]+', str) ## ['alice@google.com', 'bob@abc.com'] for email in emails: print email # 在文件中查找 f = open('test.txt','r') strings = re.findall(r'pattern',f.read()) ```
基本模式
普通字符
a-z,A-Z,0-9
.
匹配任何一个单字符,除了换行符\n
\w
匹配字母/数字/下划线,等价于[a-zA-Z0-9]
,\W
与\w
互为补集\b
匹配词和非词的分隔界限\s
匹配单个空格字符,等价于[ \n\r\t\f\v]
.\S
和\s
互为补集\t\n\r
匹配制表符,换行符,回车符\d
匹配数字,等价于[0-9]
^ $
^
匹配开头,$
匹配结尾
重复模式
+
匹配至少有一个和左边相同的字符构成的串.egi+
匹配 i/ii/iii 等*
匹配 0 个或多个和左边相同的字符构成的串.egi*
匹配 /i/ii/iii 等?
匹配 0 个或一个和左边相同的字符.egi?
匹配 /i> **注意:** > `+`和`*`都是尽可能多的匹配字符串
特殊符号
[]
代表单个字符,这个字符是属于[]
中的元素()
()
中匹配的字符串构成的一个 group,可以通过 match.group(i) 提取第 i 个组合