正则表达式,又称规则表达式。(英语:Regular Expression
,在代码中常简写为regex
、regexp
或RE
),计算机科学的一个概念。正则表达式通常被用来检索、替换那些符合某个模式(规则)的文本。
正则表达式是对字符串操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。
1.正则表达式基础
元字符
字符 | 描述 |
---|---|
\ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,‘n’ 匹配字符 “n”。’\n’ 匹配一个换行符。序列 ‘\’ 匹配 “\” 而 “\(” 则匹配 “(”。 |
. | 匹配除了换行符的任意字符 |
^ | 匹配字符串的开头 |
$ | 匹配字符串的结尾 |
\w | 匹配字母或数字或下划线或汉字 |
\s | 匹配任意空白符,如空格、tab |
\d | 匹配任意数字 |
\b | 匹配单词的开始或结束 |
限定符
字符 | 描述 |
---|---|
* | 重复零次和多次 |
+ | 重复一次或更多次 |
? | 重复零次或一次 |
{n} | 重复n次 |
{n,} | 重复n次或更多 |
{n,m} | 重复n次到m次 |
反义
字符 | 描述 |
---|---|
\W | 匹配不是字母、数字、下划线、汉字的字符 |
\S | 匹配不是空格的字符 |
\D | 匹配不是数字的字符 |
\B | 匹配不是单词开头或结束的位置 |
[^x] | 匹配除了x以外的任意字符 |
[^aeiou] | 匹配除了aeiou以外的任意字符 |
2.常用的正则表达式处理函数
Python
自1.5版本起增加了re
模块,它提供Perl
风格的正则表达式模式。
re
模块使 Python
语言拥有全部的正则表达式功能。
compile
函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。
re
模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数。
本节主要介绍Python
中常用的正则表达式处理函数
re.match
函数
re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。
re.match(pattern, string, flags=0)
re.match
参数说明
参数 | 描述 |
---|---|
pattern | 匹配的正则表达式 |
string | 匹配的字符串 |
flag | 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。 |
匹配成功re.match
方法返回一个匹配的对象,否则返回None
。
我们可以使用group(num)
或 groups()
匹配对象函数来获取匹配表达式。
匹配对象方法 | 描述 |
---|---|
group(num=0) | 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。 |
groups() | 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。 |
实例1:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
print(re.match('https', 'https://blog.csdn.net/qq_24831889').span()) # 在起始位置匹配
print(re.match('https', 'https://blog.csdn.net/qq_24831889')) # 不在起始位置匹配
运行结果:
(0, 5)
None
实例2:
#!/usr/bin/python3
import re
line = "Cats are smarter than dogs"
matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I)
if matchObj:
print ("matchObj.group() : ", matchObj.group())
print ("matchObj.group(1) : ", matchObj.group(1))
print ("matchObj.group(2) : ", matchObj.group(2))
else:
print ("No match!!")
运行结果:
matchObj.group() : Cats are smarter than dogs
matchObj.group(1) : Cats
matchObj.group(2) : smarter
正则表达式修饰符
修饰符 | 描述 |
---|---|
re.I | 对大小写不敏感 |
re.L | 做本地化识别(locale-aware)匹配 |
re.M | 多行匹配,影响 ^ 和 $ |
re.S | 使 . 匹配包括换行在内的所有字符 |
re.U | 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B. |
re.X | 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。 |
参考资料