正则表达式介绍
正则表达式(Regular expression,简称regex)是一种文本模式,用来匹配,处理,分割文本。python中内置了re模块,可以用来处理正则表达式相关的操作。
匹配字符串
在一段文本中,我们可以通过正则表达式匹配特定的字符串。例如,我们要匹配一段文字中所有的数字:
import re
text = "这是一个包含1234数字的字符串"
pattern = '\\d+' # 匹配数字的正则表达式
result = re.findall(pattern, text)
print(result)
输出结果为:['1234']
findall()是re模块中常用的一个函数,其可以在一段文本中查找全部符合条件的字符串,并以列表的形式返回。在上述代码中,我们使用正则表达式pattern来匹配文本中的数字,'\\d+'表示匹配1个或多个数字。re.findall(pattern, text)表示在文本text中匹配所有符合pattern条件的字符串,并以列表的形式返回。
正则表达式语法
正则表达式是一种特殊的语言,具有自己的语法规则。下面我们来介绍一些常用的正则表达式语法:
元字符
正则表达式中的元字符是具有特殊含义的字符,例如.表示匹配任意字符,\d表示匹配数字等。
元字符 | 匹配内容 |
---|---|
. | 匹配任意字符 |
\d | 匹配数字,等价于[0-9] |
\D | 匹配非数字 |
\w | 匹配任意字母数字字符,等价于[a-zA-Z0-9_] |
\W | 匹配非字母数字字符 |
\s | 匹配任意空白字符,包括空格、制表符、换行符等 |
\S | 匹配非空白字符 |
\b | 匹配单词边界 |
\B | 匹配非单词边界 |
字符集
字符集用来指定一组可以匹配的字符,例如[abc]表示匹配a、b、c中的任何一个字符。
量词
量词用来指定前面的字符重复出现的次数,例如*表示重复零次或多次,+表示重复一次或多次,?表示重复零次或一次。
分组和引用
可以用()来定义一个分组,可以通过\\1、\\2等来引用分组。
常用正则表达式实例
匹配手机号码
import re
text = "13812345678"
pattern = '^1[3456789]\\d{9}$'
result = re.match(pattern, text)
if result is not None:
print(result.group())
输出结果为:13812345678
在上述的代码中,我们使用正则表达式pattern来匹配文本text中的手机号码。^表示字符串的起始位置,$表示字符串的结束位置。1[3456789]表示手机号码必须以1开头,后面第二位可以是3~9之间的任何一个数字。\\d{9}表示后面还要跟9个数字。
匹配电子邮件
import re
text = "这是我的电子邮件地址,my_email@hotmail.com"
pattern = '[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+'
result = re.findall(pattern, text)
print(result)
输出结果为:['my_email@hotmail.com']
在上述的代码中,我们使用正则表达式pattern来匹配文本text中的电子邮件地址。[a-zA-Z0-9_-]+@表示邮件地址的用户名可以包含字母、数字、下划线和减号,且至少要有一个字符,@后面是域名部分,[a-zA-Z0-9_-]+\\.[a-zA-Z0-9_-]+表示域名部分可以包含字母、数字、下划线和减号,且位置至少有一个字符。
匹配IP地址
import re
text = "IP地址是192.168.1.1"
pattern = '(\\d{1,3}\\.){3}\\d{1,3}'
result = re.findall(pattern, text)
print(result)
输出结果为:['192.168.1.1']
在上述的代码中,我们使用正则表达式pattern来匹配文本text中的IP地址。(\\d{1,3}\\.){3}表示匹配3个由数字1~3位组成的数字和句号组成的组合,\\d{1,3}表示匹配一个由数字1~3位组成的数字。
总结
对于需要处理文本的python开发者而言,正则表达式是必备的一项技能。我们可以使用正则表达式来匹配特定的字符串、从复杂的文本中提取有用的信息等。在正则表达式的使用中,我们需要了解正则表达式的语法规则,这可以通过反复练习来掌握。需要注意的是,使用正则表达式并不是万能的,有些复杂的文本处理需要使用其他的技术和工具。