python正则提取
1. 什么是正则表达式
正则表达式(Regular Expression),是一种用来描述、匹配和处理字符串的工具。它有自己特定的语法规则,通过这些规则可以快速地匹配、查找和提取字符串中的信息。
正则表达式以一种很灵活的方式进行匹配,可以满足各种复杂的需求,比如邮箱格式验证、手机号码提取、网页爬虫等。在很多编程语言中都有正则表达式的支持,Python也不例外。
2. 正则表达式的基本语法
2.1 普通字符的匹配
在正则表达式中,普通字符的匹配是最简单的。普通字符就是匹配字符串中的任意字符,比如我们想要匹配字符串 “hello”,可以使用正则表达式 hello
。
import re
# 使用re模块的search方法进行匹配
result = re.search("hello", "world, hello")
print(result.group()) # 输出结果为:"hello"
2.2 元字符的使用
元字符是正则表达式中具有特殊含义的字符。下面介绍几个常用的元字符:
.
:匹配任意一个字符(除了换行符)。*
:匹配前面的字符出现0次或多次。+
:匹配前面的字符出现1次或多次。?
:匹配前面的字符出现0次或1次。^
:匹配字符串的开头。$
:匹配字符串的结尾。
以匹配手机号码为例,手机号码的格式一般为11位数字,以1开头。那么可以使用正则表达式 ^1\d{10}$
进行匹配。
import re
# 使用re模块的match方法进行匹配
result = re.match("^1\d{10}$", "13812345678")
print(result.group()) # 输出结果为:"13812345678"
2.3 字符集的使用
字符集用方括号 [ ] 表示,用于匹配方括号中的任意一个字符。比如要匹配一个字符串是以元音字母开头的,可以使用正则表达式 [aeiou]
。
import re
result = re.match("[aeiou]", "apple")
print(result.group()) # 输出结果为:"a"
除了单个字符,字符集还可以用连字符 – 表示范围。比如 [a-z]
表示匹配所有的小写字母。
2.4 转义字符的使用
正则表达式中有一些特殊字符,如果想要匹配这些特殊字符本身,而不是其特殊含义,可以使用反斜杠 \ 进行转义。比如要匹配一个字符串中的 .
字符,需要使用 \.
进行匹配。
import re
result = re.match("www\.google\.com", "www.google.com")
print(result.group()) # 输出结果为:"www.google.com"
3. 正则表达式的常用方法
3.1 match方法
re.match(pattern, string, flags=0)
方法尝试从字符串的起始位置匹配一个模式,如果匹配成功则返回一个匹配的对象,否则返回 None。
import re
result = re.match("hello", "hello world")
print(result.group()) # 输出结果为:"hello"
3.2 search方法
re.search(pattern, string, flags=0)
方法在字符串中搜索匹配的模式,如果找到第一个匹配的结果则返回一个匹配的对象,否则返回 None。
import re
result = re.search("hello", "world, hello")
print(result.group()) # 输出结果为:"hello"
3.3 findall方法
re.findall(pattern, string, flags=0)
方法返回字符串中所有与模式匹配的字符串,以列表的形式返回。
import re
result = re.findall("\d+", "123, 456, 789")
print(result) # 输出结果为:['123', '456', '789']
3.4 sub方法
re.sub(pattern, repl, string, count=0, flags=0)
方法将匹配的模式替换为指定的字符串,并返回替换后的结果。
import re
result = re.sub("\d+", "num", "123, 456, 789")
print(result) # 输出结果为:"num, num, num"
4. 实战演练
下面通过一些实例来进一步学习正则表达式的使用。
4.1 提取邮箱地址
假设我们有一个字符串,其中包含了多个邮箱地址。我们想要将这些邮箱地址提取出来。
import re
email_str = "My email addresses are email1@gmail.com and email2@yahoo.com."
result = re.findall("\w+@\w+\.\w+", email_str)
print(result) # 输出结果为:['email1@gmail.com', 'email2@yahoo.com']
4.2 提取手机号码
假设我们有一个文本文件,其中包含了一些手机号码。我们想要将这些手机号码提取出来。
import re
phone_file = open("phone.txt", "r")
phone_numbers = phone_file.read()
result = re.findall("^1\d{10}$", phone_numbers)
print(result) # 输出结果为:手机号码列表
phone_file.close()
4.3 替换敏感信息
假设我们有一个字符串,其中包含了一些敏感信息(比如身份证号码)。我们想要将这些敏感信息替换为 * 号。
import re
id_card_str = "My ID numbers are 123456789012345678 and 123456789012345679."
result = re.sub("\d{18}", "*"*18, id_card_str)
print(result) # 输出结果为:"My ID numbers are **************** and ****************."
5. 总结
正则表达式是一个强大而又灵活的工具,能够解决很多复杂的字符串匹配和处理问题。在Python中,使用re模块可以轻松地进行正则表达式的匹配、查找和提取。
本文介绍了正则表达式的基本语法,包括普通字符的匹配、元字符的使用、字符集的使用以及转义字符的使用。同时还介绍了re模块常用的几个方法,包括match方法、search方法、findall方法和sub方法。
最后通过实战演练,我们提取了邮箱地址、手机号码,并替换了敏感信息。