在Python编程中,使用正则表达式(Regular Expression)可以方便地进行字符串匹配和处理。本文将从多个方面介绍正则表达式的使用实例。
一、正则表达式使用实例
首先,我们先来看一些正则表达式的基本语法和符号:
字符匹配:
. 匹配任意一个字符
\d 匹配数字,等同于[0-9]
\D 匹配非数字,等同于[^0-9]
\w 匹配字母、数字、下划线,等同于[a-zA-Z0-9_]
\W 匹配非字母、数字、下划线,等同于[^a-zA-Z0-9_]
\s 匹配空格、制表符、换行符等空白字符
\S 匹配非空白字符
[] 匹配括号内的任意一个字符,例如[abc]匹配a、b或c
[^...] 匹配不在括号内的任意一个字符,例如[^abc]匹配除了a、b、c以外的任意一个字符
重复匹配:
* 重复>=0次
+ 重复>=1次
? 重复0或1次
{n} 重复n次
{n,} 重复>=n次
{n,m} 重复n~m次
位置匹配:
^ 匹配字符串开头
$ 匹配字符串结尾
\b 匹配单词边界
\B 匹配非单词边界
(?=...) 正向前查找,匹配括号内的表达式
(?!...) 负向前查找,不匹配括号内的表达式
(?<=...) 正向后查找,匹配括号内的表达式
(?
下面是一些具体的正则表达式使用实例,以字符匹配为例:
1、匹配数字:
import re
a = '12345'
# 匹配一个数字
result = re.findall(r'\d', a)
print(result)
# output: ['1', '2', '3', '4', '5']
# 匹配数字串
result = re.findall(r'\d+', a)
print(result)
# output: ['12345']
2、匹配字母:
a = 'hello world'
# 匹配一个字母
result = re.findall(r'[a-z]', a)
print(result)
# output: ['h', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd']
# 匹配单词
result = re.findall(r'\b[a-z]+\b', a)
print(result)
# output: ['hello', 'world']
二、Python正则表达式怎么用
Python提供了re模块来支持正则表达式。re模块中常用的函数有:
- re.search(pattern, string, flags=0):在一个字符串中搜索匹配正则表达式的第一个位置,返回match对象。
- re.match(pattern, string, flags=0):尝试从字符串的起始位置匹配正则表达式,返回match对象。
- re.findall(pattern, string, flags=0):搜索字符串,以列表形式返回全部匹配的子串。
- re.finditer(pattern, string, flags=0):搜索字符串,返回一个包含匹配对象的迭代器。
- re.sub(pattern, repl, string, count=0, flags=0):使用指定的替换字符串替换原字符串中满足正则表达式的所有子串。
下面是一些具体的使用实例:
1、使用re.search():
import re
text = "abcdefg"
search_result = re.search(r"cd", text)
print(search_result.group())
# output: 'cd'
2、使用re.findall():
import re
text = "Cats are smarter than dogs"
findall_result = re.findall(r"\w+", text)
print(findall_result)
# output: ['Cats', 'are', 'smarter', 'than', 'dogs']
3、使用re.sub():
import re
text = "Python is fun, isn't it?"
sub_result = re.sub(r"is", "was", text)
print(sub_result)
# output: "Python was fun, isn't it?"
三、Python爬虫正则表达式
在爬虫开发中,使用正则表达式可以提取HTML页面中的数据信息。下面是一些具体的使用实例:
1、提取链接:
import re
import urllib.request
url = "https://www.baidu.com/"
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')
links = re.findall(r'"((http|ftp)s?://.*?)"', html)
for link in links:
print(link[0])
2、提取图片:
import re
import urllib.request
url = "https://www.google.com/"
response = urllib.request.urlopen(url)
html = response.read().decode('utf-8')
images = re.findall(r'
四、Python正则表达式操作
在Python中,使用正则表达式有很多种操作和方法,下面是一些常用的操作:
1、编译正则表达式:
import re
pattern = re.compile(r'\d+')
result = pattern.findall('one123two456three789')
print(result)
# output: ['123', '456', '789']
2、match对象的方法:
import re
match_obj = re.match(r'\d+', '123abc456')
print(match_obj.group()) # group()方法返回被匹配的字符串
match_obj = re.match(r'(\d+)(\w+)', '123abc456')
print(match_obj.group(1)) # group(1)方法返回第一个括号内匹配的字符串
print(match_obj.group(2)) # group(2)方法返回第二个括号内匹配的字符串
3、使用分组:
import re
text = "cat, bat, sat, hat"
result = re.sub(r'(\w+), (\w+), (\w+), (\w+)', r'\1 and \2 and \3 and \4', text)
print(result)
# output: 'cat and bat and sat and hat'
五、Python正则表达式例子
下面是一些实用的正则表达式例子:
1、匹配电子邮件:
import re
pattern_email = re.compile(r'\w+@\w+.(com|cn|net)') # 只匹配.com, .cn, .net结尾的邮箱
emails = ['abc@qq.com', '123@163.com', 'aaa@126.net', 'bbb@qq.cn', 'ccc@xxx.com']
for email in emails:
match_obj = re.match(pattern_email, email)
if match_obj:
print(match_obj.group())
2、匹配手机号码:
import re
pattern_phone = re.compile(r'(13\d|14[579]|15[^4\D]|17[^49\D]|18\d)\d{8}')
phones = ['12345678901', '13612345678', '98765432101', '18732165498', '15365478903']
for phone in phones:
match_obj = re.match(pattern_phone, phone)
if match_obj:
print(match_obj.group())
3、匹配IP地址:
import re
pattern_ip = re.compile(r'\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b')
ips = ['192.168.1.1', '172.16.0.1', '8.8.8.8', '0.0.0.0', '11.11.11.1111']
for ip in ips:
match_obj = re.match(pattern_ip, ip)
if match_obj:
print(match_obj.group())
六、Python正则表达式举例
下面举一些实际中常用的正则表达式例子:
1、匹配身份证号码:
import re
pattern_id = re.compile(r'\d{17}[\dXx]')
ids = ['110101199003076318', '370831199312123212', '360482198606021990', '510105198705142345', '820000199710200003']
for id in ids:
match_obj = re.match(pattern_id, id)
if match_obj:
print(match_obj.group())
2、匹配日期:
import re
pattern_date = re.compile(r'\d{4}-\d{2}-\d{2}')
dates = ['2022-01-02', '2022-01-32', '2022-13-01', '2022/01/02', '2022-01-02 12:34:56']
for date in dates:
match_obj = re.match(pattern_date, date)
if match_obj:
print(match_obj.group())
3、匹配URL:
import re
pattern_url = re.compile(r'https?://[\S]+')
urls = ['http://www.baidu.com', 'https://www.google.com', 'ftp://www.abc.com', 'mailto:test@test.com']
for url in urls:
match_obj = re.match(pattern_url, url)
if match_obj:
print(match_obj.group())
以上就是Python正则表达式的使用实例,通过不断的实践和尝试,相信大家已经可以熟练地应用正则表达式来解决实际问题了。