正则表达式
- 是什么:Regular Expression,简写RE,是预先定义好的一个“规则字符串”,通过这个规则字符串可以匹配、查找和替换那些符合规则的文本。
- 优点:文本的查找替换虽然可以使用字符串提供的方法实现,但是实现较为困难,运算效率低。使用正则效率高。
- 缺点:编写合适的正则表达式较为困难。
- python中应用:数据挖掘、数据分析、网络爬虫、输入有效性验证等待。
正则表达式字符串
- 正则表达式是一种字符串,它由普通字符和元字符组成的。
- 普通字符:按照字符字面意义的字符。
- 元字符:预先定义好的一些特定字符。
- 如验证邮箱的正则表达式:
\w+@zhengzetang\.com
,其中\w+
、\.
属于元字符;@zhengzetang
、com
是普通字符。
元字符
- 用来描述其他字符的特殊字符,由基本元字符和普通字符构成,基本元字符是构成元字符的组成要素。基本元字符有14个,如下表
转义字符
- 以上面匹配邮箱的字符串
\w+@zhengzetang\.com
为例 w
字符不表示英文字母w,而是表示任何语言的单词字符、数字或下划线等内容时,需要在w前面加上反斜杠“\”。.
本身是基本元字符,代表任意一个字符,但是我们希望按照.
字面的意义使用(就是一个点),这时候加上一个反斜杠“\”就可以实现了。- 转义字符
\
就是对普通字符或基本元字符,进行转义,用于其他功能。
开始与结束符
- 前面提到了
^
和$
,用以匹配一行字符串的开始和结束。 - 当以
^
开始时,要求一行字符串的开始位置匹配。 - 当以
$
结束时,要求一行字符串的结束位置匹配。import re p1 = r'\w+@tianshangrenjian\.com' p2 = r'^\w+@tianshangrenjian\.com$' text = "My email is tong_guan588@tianshangrenjian.com." m = re.search(p1, text) print(m) # 匹配不到,有^,$符号,匹配时要求text字符串开始和结束都要与正则表达式开始和结束匹配。 a = re.search(p2,text) print(a) # email字符串的开始与结束与正则表达式相匹配 email = 'tong_guan588@tianshangrenjian.com' b = re.search(p2, email) print(b)
- 显示结果
字符类
- 正则表达式种可以使用字符类(character class),一个字符类定义一组字符,其中的任一字符出现在输入字符串中即匹配成功。
- 注意:每次匹配只能匹配字符串中的一个字符。
定义字符类
- 定义一个普通的字符类,使用
[]
元字符类。例,想在字符串中匹配java或Java,可以使用正则表达式[Jj]ava
import re p = r'[Jj]ava' # 可以匹配 m = re.search(p, 'i like Java and Python') print(m) # 可以匹配 c = re.search(p, 'i like java and Python') print(c) # 不可匹配 b = re.search(p, 'i like JAVA and Python') print(b) # 想要匹配JAVA,可以使用| p2 = r'java|JAVA|Java' d = re.search(p2, 'i like JAVA and Python') print(d)
- 运行结果为
字符类取反
- 在正则表达式中指定不想出现的字符, 可以在字符前加
^
符号。import re p = r'[^0123456789]' # 不匹配数字 m = re.search(p, '239120392') print(m) # 除了非数字外,都可以匹配任意字符 a = re.search(p, 'Reasdskf') print(a)
- 运行结果
区间
- 如果要表示连续的数字,用
[^0123456789]
,较为复杂,可以使用区间符号-
表示。即[^0123456789]
等同于[