Regular Expression
模式匹配
- 万能字符: “.”
- 重复操作符:“+”,”?”, “*”
- 也可指定重复次数: {}
- 重复操作符默认是贪婪的,它会一直寻找它的边界直到最后一个边界出现为止[1]
- 给重复操作符添加一个“?” 可以让万能字符匹配尽可能少的次数[2]
- 字符集: [] 方括号扩起来的字符集,
- ‘[a-zA-Z0-9]’ 短斜杠标志起点终点
- ‘[^abc]’ 反选
- Subpatterns: ()
re 模块的常用方法
Function | Description |
---|---|
compile(pattern[, flags]) | 从一个规则表达式字符串创建模式对象 |
search(pattern,string[, flags] | 在 string 中查找模式 |
match(pattern, string[, flags]) | 从字符串的起始处匹配模式 |
split(pattern, string[, maxsplit=0]) | 根据模式的出现分割字符串 |
findall(pattern, string) | 返回一个 list 包含 string 中所有出现的模式 |
sub(pat, repl, string[, count=0]) | 将出现的模式替换成 repl |
escape(string) | 将字符串中的所有特殊规则表达式字符转义 |
1 | >> import re |
Match 对象及分组提取
- 分组提取
1
2
3>>> m = re.match(r'www\.(.*)\..{3}', 'www.python.org')
>>> m.group(1)
'python' - 替换
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17>>> emphasis_pattern = re.compile(r'''
... \* # Beginning emphasis tag -- an asterisk
... ( # Beginning group for capturing phrase
... [^\*]+ # Capture anything except asterisks
... ) # End group
... \* # Ending emphasis tag
... ''', re.VERBOSE)
>>> re.sub(emphasis_pattern, r'<em>\1<em>', 'hello, *world*!')
'hello, <em>world<em>!'
>>> emphasis_pattern = r'\*(.+)\*' #[1]
>>> re.sub(emphasis_pattern, r'<em>\1<em>', 'hello, *world*! *my son*')
'hello, <em>world*! *my son<em>'
>>> emphasis_pattern = r'\*(.+?)\*' #[2]
>>> re.sub(emphasis_pattern, r'<em>\1<em>', 'hello, *world*! *my son*')
'hello, <em>world<em>! <em>my son<em
模板替换
1 | # templates.py |
template.txt
1 | [import time] |
magnus.txt
1 | [name = 'Magnus Lie Hetland' ] |
1 | python templates.py magnus.txt template.txt |