python 正则表达式学习
资源来自
学习资源来自ubuntu wiki
正则表达式介绍
正则表达式,各种语言都有相关的库。就其本质而言,正则表达式(或 RE)是一种小型的、高度专业化的编程语言
简单模式
字符匹配
- _大多数_字母和字符一般都会和自身匹配。例如,正则表达式 test 会和字符串“test”完全匹配。
- 正则表达式使用一些元字符来帮助字符匹配:
. ^ $ * + ? { [ ] \ | ( )
“[” 和 “]”
“[” 和 “]” : 它们常用来指定一个字符类别,所谓字符类别就是你想匹配的一个字符集。
字符可以单个列出,也可以用”-“分隔表示区间[a-z].
\
\d
: 相当于[0-9]\D
: 匹配任何非数字字符;相当于[0-9]\s
: 匹配任何空白字符;相当于[ \t\n\r\f\v ]\S
: 匹配任何非空白字符;相当于[ \t\n\r\f\v ]
‘\w‘ : 匹配任何字母数字字符;相当于[a-zA-Z0-9_]\W
: …; 相当于[^a-zA-Z0-9_]
举个栗子:[\s,.]将匹配任何空白字符”,“或者”.”
重复
正则表达式的另一个功能是你可以指定正则表达式的一部分的重复次数。
“*”
- 我们先来看第一个重复功能的元字符* . * 并不匹配字符”*“;他可以指定前一个字符可以被
匹配0次或者多次。“ca*t” 可以匹配 “ct”,“caaat”
“+”
- “+” 表示匹配一次或者多次,最少一次。“ca+t"可以匹配"cat"caaat"但不可以"ct”.
- {m,n}(注意m,n中不能有空格),它的意思是至少m个重复,最多n个重复。
{0,} 等同于 *,{1,} 等同于 +,而{0,1}则与 ? 相同。如果可以的话,最好使用 *,+,或?。很简单因为它们更短也更容易懂。
正则表达式在python中的应用
编译正则表达式
正则表达式被编译成
RegexObject
实例,可以为不同的操作提供方法,如模式匹配搜索或字符串替换。import re p = re.compile(‘ab\*‘) print p <\_sre.SRE\_Pattern object at 0xb76e1a70>
反斜杠的麻烦
- 要匹配反斜杠,就要2个反斜杠(markdown中写反斜杠麻烦,我就用文字代替) 这样写,但是在python中,反斜杠本来就要2个反斜杠,所以就会需要4个反斜杠来匹配反斜杠
- 所以就有了r‘‘,字符串前加个 “r” 反斜杠就不会被任何特殊方式处理。所以 r”\n” 就是包含”" 和 “n” 的两个字符,而 “\n” 则是一个字符,表示一个换行。正则表达式通常在 Python 代码中都是用这种 raw 字符串表示。
执行匹配
几个重要的方法(regexobject的方法):
match()
: 决定re是否在字符串刚开始的位置匹配search()
: 扫描字符串,找到这个re匹配的位置findall()
: 找到re匹配的所有子串,作为一个列表
返回finditer()
: 找到re匹配的所有自串,并把他们作为一个迭代器返回几个MatchObject的重要方法:
>> m = p.match( ‘tempo‘) >> print m <_sre.SRE_Match object at 80c4f68>
group()
: 返回被re匹配的字符串start()
: 返回匹配开始的位置end()
: 返回结束的位置span()
: 返回一个元组包含匹配(开始,结束)的位置
举几个栗子
import re str = "http://www.oschina.net/?code=QlSJi2&state=" pattern = re.compile(‘code=\w+\&‘) match = pattern.search(str) if match: print match.group(), match.span()
时间: 2024-11-05 18:37:39