正则表达式实战例子

正则表达式实战例子

1. 验证电子邮件地址

定义一个合理的电子邮件格式,并检查给定的字符串是否符合这个模式。

python 复制代码
import re

def is_valid_email(email):
    # 定义电子邮件格式的正则表达式
    pattern = r'^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$'
    return bool(re.match(pattern, email))

# 测试
emails = ["[email protected]", "invalid-email", "[email protected]"]
for email in emails:
    print(f"{email}: {is_valid_email(email)}")
2. 提取网页中的所有链接

使用正则表达式来查找HTML文档中所有的<a>标签及其href属性。

python 复制代码
import re

html_content = """
<a href="http://example.com/page1">Link 1</a>
<a href='http://example.com/page2'>Link 2</a>
<a href="javascript:void(0)">Invalid Link</a>
"""

# 匹配带有href属性的a标签,并提取href值
link_pattern = re.compile(r'<a\s+(?:[^>]*?\s+)?href=[\'"]([^\'"]*)[\'"][^>]*>')
links = link_pattern.findall(html_content)

print("Extracted Links:", links)
3. 电话号码格式化

电话号码都转换成XXX-XXX-XXXX的形式。

python 复制代码
import re

def format_phone_number(phone):
    # 去除非数字字符,并确保长度正确
    cleaned = re.sub(r'\D', '', phone)
    if len(cleaned) == 10:
        return f"{cleaned[:3]}-{cleaned[3:6]}-{cleaned[6:]}"
    else:
        return None

phones = ["(123) 456-7890", "123.456.7890", "1234567890", "123-456-7890"]
formatted_phones = [format_phone_number(p) for p in phones]
print(formatted_phones)
4. 替换敏感信息

掩盖或删除这些敏感信息。这里我们用正则表达式来识别并替换信用卡号。

python 复制代码
import re

def mask_credit_card(text):
    # 替换所有连续16位数字的序列(信用卡号)为"****-****-****-1234"
    masked_text = re.sub(r'\b\d{4}[-\s]?\d{4}[-\s]?\d{4}[-\s]?\d{4}\b',
                         '****-****-****-1234', text)
    return masked_text

log_entry = "Customer paid with card number 4111-1111-1111-1111."
masked_log = mask_credit_card(log_entry)
print(masked_log)
5. 解析日志文件

使用正则表达式来解析这些日志条目,提取出IP地址、时间戳和请求路径等信息。

python 复制代码
import re

log_line = '127.0.0.1 - - [10/Oct/2023:13:55:36 +0000] "GET /index.html HTTP/1.1" 200 2326'

# 解析日志条目的正则表达式
log_pattern = re.compile(r'(\S+) (\S+) (\S+) \[(.*?)\] "(.*?)" (\d{3}) (\d+|-)')

match = log_pattern.match(log_line)
if match:
    ip_address, _, _, timestamp, request, status_code, size = match.groups()
    print(f"IP Address: {ip_address}")
    print(f"Timestamp: {timestamp}")
    print(f"Request: {request}")
    print(f"Status Code: {status_code}")
    print(f"Size: {size}")
相关推荐
HyggeBest4 分钟前
Mysql 宏观架构
mysql·架构
海尔辛18 分钟前
SQL 基础入门
数据库·sql
jiunian_cn1 小时前
【Linux】Linux权限
linux·服务器·mysql
betazhou2 小时前
有没有 MariaDB 5.5.56 对应 MySQL CONNECTION_CONTROL 插件
linux·数据库·mysql·oracle·mariadb
Elohim8152 小时前
数据库SQLite基础
数据库·sqlite
TDengine (老段)2 小时前
TDengine 支持的平台汇总
大数据·数据库·物联网·时序数据库·iot·tdengine·涛思数据
异常君2 小时前
MySQL 中 count(*)、count(1)、count(字段)性能对比:一次彻底搞清楚
java·mysql·面试
烟雨书信2 小时前
Linux中MySQL的逻辑备份与恢复
linux·运维·mysql
大熊猫侯佩2 小时前
由一个 SwiftData “诡异”运行时崩溃而引发的钩深索隐(四)
数据库·swiftui·apple watch
想用offer打牌3 小时前
面试官问:Redis和MySQL数据一致,为什么还需要MySQL?🤠
数据库·redis·mysql