Python第十次课
正则表达式
一、正则表达式语法
一)
元字符 | 功能说明 |
---|---|
. | 匹配除换行符以外的任意单个字符 |
* | 匹配位于*之前的字符或子模式的0次或多次出现 |
+ | 匹配位于+之前的字符或子模式的1次或多次出现 |
- | 在[]之内用来表示范围 |
匹配位于 | |
^ | 匹配行首,匹配以^后面的字符开头的字符串 |
$ | 匹配行尾,匹配以$之前的字符结束的字符串 |
? | 匹配位于?之前的0个或1个字符。当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是“非贪心的”。“非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的“贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串“oooo”中,“o+?”只匹配单个“o”,而“o+”匹配所有“o” |
\f | 换页符匹配 |
\n | 换行符匹配 |
二)
1 最简单的正则表达式是普通字符串,可以匹配自身
2 ‘[pjc]ython’可以匹配’python’、‘jython’、‘cython’
3 '[a-zA-Z0-9]'可以匹配一个任意大小写字母或数字
4 '[^abc]‘可以一个匹配任意除’a’、‘b’、‘c’之外的字符
5 ‘python|perl’或’p(ython|erl)‘都可以匹配’python’或’perl’
6 子模式后面加上问号表示可选。r’(http://)?(www.)?python.org’只能匹配’http://www.python.org’、‘http://python.org’、‘www.python.org’和’python.org’
7 '^http’只能匹配所有以’http’开头的字符串
8 (pattern)*:允许模式重复0次或多次
9 (pattern)+:允许模式重复1次或多次
10 (pattern){m,n}:允许模式重复m~n次
二、re模块主要方法
方法 | 功能说明 |
---|---|
compile(pattern[, flags]) | 创建模式对象 |
escape(string) | 将字符串中所有特殊正则表达式字符转义 |
findall(pattern, string[, flags]) | 返回包含字符串中所有与给定模式匹配的项的列表 |
finditer(pattern, string, flags=0) | 返回包含所有匹配项的迭代对象,其中每个匹配项都是match对象 |
fullmatch(pattern, string, flags=0) | 尝试把模式作用于整个字符串,返回match对象或None |
match(pattern, string[, flags]) | 从字符串的开始处匹配模式,返回match对象或None |
purge() | 清空正则表达式缓存 |
search(pattern, string[, flags]) | 在整个字符串中寻找模式,返回match对象或None |
split(pattern, string[, maxsplit=0]) | 根据模式匹配项分隔字符串 |
sub(pat, repl, string[, count=0]) | 将字符串中所有与pat匹配的项用repl替换,返回新字符串,repl可以是字符串或返回字符串的可调用对象,作用于每个匹配的match对象 |
subn(pat, repl, string[, count=0]) | 将字符串中所有pat的匹配项用repl替换,返回包含新字符串和替换次数的二元元组repl可以是字符串或返回字符串的可调用对象,作用于每个匹配的match对象 |
应用:1.将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I
def rev3(s):
'''考虑开头或结束有空格的情况'''
import re
t = re.split('\s+', s.strip())
t.reverse()
return ' '.join(t)
def rev4(s):
'''考虑开头或结束有空格的情况'''
import re
t = re.split('\s+', s.strip())
return ' '.join(reversed(t))
```
2.查找字符串中最长的数字子串
```python
def longest1(s):
'''查找所有连续数字'''
import re
t = re.findall('\d+', s)
if t:
return max(t, key=len)
return 'No'
def longest2(s):
'''使用非数字作为分隔符'''
import re
t = re.split('[^\d]+', s)
if t:
return max(t, key=len)
return 'No'
三、使用正则表达式对象
- match()、search()、findall()
&match(string[, pos[, endpos]])方法在字符串开头或指定位置进行搜索,模式必须出现在字符串开头或指定位置;
&search(string[, pos[, endpos]])方法在整个字符串或指定范围中进行搜索;
&findall(string[, pos[, endpos]])方法在字符串指定范围中查找所有符合正则表达式的字符串并以列表形式返回。
2.sub()、subn()
&正则表达式对象的sub(repl, string[, count = 0])和subn(repl, string[, count = 0])方法用来实现字符串替换功能,其中参数repl可以为字符串或返回字符串的可调用对象。
3.正则表达式对象的split(string[, maxsplit = 0])方法用来实现字符串分隔。
总结
最后的惯例,上图!