1.正则表达式的语法:
正则表达式的常用操作符:
常用操作符 | 含义 |
---|---|
. | 表示单个字符 |
[] | 字符集,[a-z]表示a到z之间的字符 |
[^] | 非字符集,对单个字符给出排除范围 |
* | 前一个字符出现0次或者无限次扩展 |
+ | 前一个字符出现1次或者无限次扩展 |
? | 前一个字符出现0次或者1次扩展 |
| | 左右表达式的任意一个 |
{m} | 扩展前一个字符m次 |
{m,n} | 扩展前一个字符m到n次(含n次) |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
() | 分组标记,内部只能用 |
\d | 数字,等价于[0-9] |
\w | 单词字符,等价于[A-z a-z 0-9] |
2.re库的基本使用:
re.search(pattern, string, flags=0)
作用:在字符串中搜索匹配正则表达式第一个位置
参数 | 含义 |
---|---|
pattern | 正则表达死字符串或者原生字符串表示 |
string | 待匹配字符串 |
flags | 正则表达式使用时的控制标记 |
范例:
match=re.search(r'[1-9]\d{4}', 'BIT 10081')
if match:
print(match.group(0))
re.match(pattern, string, flags=0)
作用: #在字符串中的开始位置起匹配正则表达式
范例:
match1=re.match(r'[1-9]\d{4}', '10081 BIT')
match2=re.match(r'[1-9]\d{4}', 'BIT 10081')
if mathc1:
print(match1.group(0))
if match2:
print(match2.group(0))
re.findall(pattern, string, flags=0)
作用:搜索字符串,以列表类型返回全部匹配字符串
范例:
ls=re.findall(r'[1-9]\d{4}', 'BIT10081 TS10084')
print(ls)
re.split(pattern, string, maxsplit=0, flags=0)
作用:将一个字符串安正则表达式匹配结果分割
范例:
re.split(r'[1-9]\d{4}', 'BIT10081 TSU10084')
re.split(r'[1-9]\d{4}', 'BIT10081 TSU10084', maxsplit=1)
re.finditer(pattern, string, flags=0)
作用:搜索字符串,返回一个匹配结果的迭代类型
范例:
for m in re.finditer(r'[1-9]\d{4}', 'BIT10081 TSU10084'):
if m:
print(m.group(0))
re.sub(pattern, repl, string, count=0, flags=0)
作用:在一个字符串中替换所有匹配正则表达式的子串
参数 | 含义 |
---|---|
repl | 替换匹配字符串的字符串 |
count | 匹配的最大替换次数 |
flags | 正则表达式使用时的控制标记 |
范例:
re.sub(r'[1-9]\d{4}', ':zipcode', 'BIT10081 TSU10084')
3.re库的一种等价用法
print('表达式1:')
rst=re.search(r'[1-9]\d{4}', 'BIT10081')
print('等价表达式2:')
pat=re.compile(r'[1-9]\d{4}')
rst=pat.search('BIT10081')
4.re库的match对象
match对象的属性:
属性 | 含义 |
---|---|
.string | 待匹配的文本 |
.re | 正则表达式 |
.pos | 正则表达式搜索文本的开始位置 |
.endpos | 正则表达式搜索文本的结束位置 |
match对象的方法:
方法 | 含义 |
---|---|
.group(0) | 获得匹配后的字符串 |
.start() | 匹配字符串在原始字符串的开始位置 |
.end() | 匹配字符串在原始字符串的结束位置 |
.span() | 返回(.start(), .end()) |
5.re库的贪婪匹配和最小匹配
print('re库默认贪婪匹配,输出最长匹配字符串:')
match=re.search(r'py.*n', 'pyanbncndn')
match.group(0)
最小匹配:
操作符 | 含义 |
---|---|
*? | 前一个字符出现0次或者无限次扩展 |
+? | 前一个字符出现1次或者无限次扩展 |
?? | 前一个字符出现0次或者1次扩展 |
{m,n} | 扩展前一个字符m到n次(含n次) |
print('最小匹配字符串:')
match=re.search(r'py.*?n', 'pyanbncndn')
match.group(0)
该问参考中国大学MOOC课程 《python网络爬虫与信息提取》