本文将从多个方面对Python正则逆向进行详细阐述,并提供相应的代码示例。
一、正则表达式基础
1、正则表达式的作用
正则表达式是一种强大的文本匹配工具,可以用来匹配、替换和提取文本中的特定模式。在Python中,可以使用re模块来实现正则表达式的相关操作。
import re
# 示例1:匹配手机号码
phone_numbers = ['12345678901', '13912345678', '110']
pattern = r'^1[3-9]d{9}$'
for number in phone_numbers:
if re.match(pattern, number):
print(f'{number}是一个合法的手机号码')
else:
print(f'{number}不是一个合法的手机号码')
2、常用的正则表达式元字符
在正则表达式中,有一些特殊的元字符具有特殊的含义,常用的元字符包括:
. 匹配任意字符(除换行符外)
w 匹配字母、数字或下划线
d 匹配数字
s 匹配任意空白字符
^ 匹配字符串的开始位置
$ 匹配字符串的结束位置
[] 匹配括号内的任意一个字符
转义字符,用于匹配特殊字符
二、正则表达式高级用法
1、贪婪匹配与非贪婪匹配
在默认情况下,正则表达式会尽可能多地匹配字符串,这种匹配方式被称为贪婪匹配。如果想要匹配最短的字符串,则可以使用非贪婪匹配。
import re
# 示例2:贪婪匹配与非贪婪匹配
string = 'hello world'
pattern = r'h.*o'
match_obj = re.match(pattern, string)
print(match_obj.group()) # 输出:hello
pattern = r'h.*?o'
match_obj = re.match(pattern, string)
print(match_obj.group()) # 输出:hello
2、分组和引用
正则表达式中使用括号可以对模式进行分组,并可以通过数字来引用分组的内容。
import re
# 示例3:分组和引用
string = 'hello world'
pattern = r'(w+)s1'
match_obj = re.match(pattern, string)
print(match_obj.group()) # 输出:hello hello
三、逆向技术应用
1、爬虫中的正则表达式
在网络爬虫中,经常需要通过正则表达式从网页内容中提取需要的数据。
import re
import requests
# 示例4:使用正则表达式提取网页中的图片链接
url = 'https://www.example.com'
response = requests.get(url)
html = response.text
pattern = r''
links = re.findall(pattern, html)
print(links)
2、日志分析与提取
使用正则表达式可以方便地从日志文件中提取特定的信息。
import re
# 示例5:使用正则表达式提取日志中的IP地址
log = '192.168.0.1 - - [01/Jan/2022:08:00:00 +0800] "GET /index.html HTTP/1.1" 200 100'
pattern = r'd{1,3}.d{1,3}.d{1,3}.d{1,3}'
ip = re.search(pattern, log).group()
print(ip) # 输出:192.168.0.1
以上是Python正则逆向的简单介绍和应用示例,希望能对读者有所帮助。