Python 正则匹配字符串
正则表达式是用来描述一组字符串匹配规则的表达式,它提供了一种灵活、强大的字符串匹配方式。在Python中,我们可以通过re
模块来使用正则表达式进行字符串匹配。
一、基本匹配规则
在Python中,使用正则表达式进行字符串匹配时,常用的匹配规则包括:
.
: 匹配任意一个字符(除换行符外)^
: 匹配字符串的开头$
: 匹配字符串的结尾*
: 匹配前面的字符零次或多次+
: 匹配前面的字符一次或多次?
: 匹配前面的字符零次或一次[]
: 匹配中括号中的任意一个字符|
: 匹配左右两边的任意一个表达式{n}
: 匹配前面的字符恰好n次{m,n}
: 匹配前面的字符至少m次,至多n次
下面我们通过一些示例来演示这些基本的匹配规则:
import re
# 匹配任意一个字符
pattern1 = r'.at'
text = 'cat, bat, mat'
result1 = re.findall(pattern1, text)
print(result1) # ['cat', 'bat', 'mat']
# 匹配字符串的开头
pattern2 = r'^cat'
result2 = re.findall(pattern2, text)
print(result2) # ['cat']
# 匹配字符串的结尾
pattern3 = r'mat$'
result3 = re.findall(pattern3, text)
print(result3) # ['mat']
# 匹配前面的字符零次或多次
pattern4 = r'ca*t'
result4 = re.findall(pattern4, text)
print(result4) # ['cat']
# 匹配前面的字符一次或多次
pattern5 = r'ca+t'
result5 = re.findall(pattern5, text)
print(result5) # ['cat']
# 匹配前面的字符零次或一次
pattern6 = r'ca?t'
result6 = re.findall(pattern6, text)
print(result6) # ['cat']
# 匹配中括号中的任意一个字符
pattern7 = r'[cb]at'
result7 = re.findall(pattern7, text)
print(result7) # ['cat', 'bat']
# 匹配左右两边的任意一个表达式
pattern8 = r'ca|at'
result8 = re.findall(pattern8, text)
print(result8) # ['ca', 'at']
# 匹配前面的字符恰好n次
pattern9 = r'ca{2}t'
result9 = re.findall(pattern9, text)
print(result9) # []
# 匹配前面的字符至少m次,至多n次
pattern10 = r'ca{1,2}t'
result10 = re.findall(pattern10, text)
print(result10) # ['cat']
二、常用正则表达式方法
在Python的re
模块中,常用的正则表达式方法包括:
re.match()
: 从字符串的开头开始匹配re.search()
: 在字符串中搜索匹配re.findall()
: 找到匹配的所有子串并返回一个列表re.sub()
: 替换字符串中的匹配项
下面我们通过示例来演示这些常用的正则表达式方法:
import re
text = 'cat, bat, mat'
# re.match()
pattern1 = r'cat'
result1 = re.match(pattern1, text)
print(result1) # <re.Match object; span=(0, 3), match='cat'>
# re.search()
pattern2 = r'bat'
result2 = re.search(pattern2, text)
print(result2) # <re.Match object; span=(5, 8), match='bat'>
# re.findall()
pattern3 = r'[c|b]at'
result3 = re.findall(pattern3, text)
print(result3) # ['cat', 'bat']
# re.sub()
pattern4 = r'cat'
replace_text = re.sub(pattern4, 'dog', text)
print(replace_text) # dog, bat, mat
三、常用的正则表达式
在实际工作中,有一些常用的正则表达式可以帮助我们快速匹配目标字符串,例如:
- 匹配邮箱地址:
\w+@\w+\.\w+
- 匹配手机号码:
1[0-9]{10}
- 匹配IP地址:
(\d{1,3}\.){3}\d{1,3}
- 匹配URL地址:
(https?|ftp|file)://\w+\.\w+
下面我们通过示例来演示这些常用的正则表达式:
import re
# 匹配邮箱地址
email_text = 'my email is abc@example.com'
pattern1 = r'\w+@\w+\.\w+'
result1 = re.findall(pattern1, email_text)
print(result1) # ['abc@example.com']
# 匹配手机号码
phone_text = 'my phone number is 18912345678'
pattern2 = r'1[0-9]{10}'
result2 = re.findall(pattern2, phone_text)
print(result2) # ['18912345678']
# 匹配IP地址
ip_text = 'my ip is 192.168.1.1'
pattern3 = r'(\d{1,3}\.){3}\d{1,3}'
result3 = re.findall(pattern3, ip_text)
print(result3) # ['192.168.1.1']
# 匹配URL地址
url_text = 'my website is http://www.example.com'
pattern4 = r'(https?|ftp|file)://\w+\.\w+'
result4 = re.findall(pattern4, url_text)
print(result4) # ['http://www.example.com']
通过以上示例,我们可以看到使用Python进行正则表达式匹配非常简单,只需要掌握一些基本的匹配规则和常用的方法,就可以很轻松地处理字符串匹配的问题。