提取一个字符串的最有效方法是什么?

2024-03-28 15:27:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python函数,可以输出这样的字符串。你知道吗

    if (X1079) { clearTimeout (X1079); X1079 = null; }
X781 ('<FORM name="X58" method="POST" action="http://us21.chatzy.com/56024939146241"><DIV style="display:none;"><INPUT type="hidden" name="X1" value="218"></DIV><DIV style="display:none;"><INPUT type="hidden" name="X579" value="1"></DIV><DIV style="display:none;"><INPUT type="hidden" name="X691" value="NTYwMjQ5MzkxNDYyNDEmNTYwMjQ5MzkxNDYyNDEmMCZYMTY4JjE0MjI1NTUxMDkmSllJR0lOVk0mYXl5JkZGRkZGRiYmMSYzJjEmdXdvb2RsZXM3Nzc2QGpvdXJyYXBpZGUuY29tJjd6c3AwJjE0MjI4MDM4NDMmJjAm"></DIV></FORM>');

最后是一个用Base64编码的字符串

NTYwMjQ5MzkxNDYyNDEmNTYwMjQ5MzkxNDYyNDEmMCZYMTY4JjE0MjI1NTUxMDkmSllJR0lOVk0mYXl5JkZGRkZGRiYmMSYzJjEmdXdvb2RsZXM3Nzc2QGpvdXJyYXBpZGUuY29tJjd6c3AwJjE0MjI4MDM4NDMmJjAm

但是我无法想象每次都提取这个字符串的任何实际方法,因为第一个(较长的)字符串每次都会改变,并且可以有不同的内容和长度,无论如何,那么Base64字符串被解码成这个。你知道吗

56024939146241&56024939146241&0&X168&1422555109&JYIGINVM&ayy&FFFFFF&&1&3&1&uwoodles7776@jourrapide.com&7zsp0&1422803843&&0&

现在,我们也看到了解码字符串的这一部分

JYIGINVM

这就是我需要得到的,应该注意的是,上面所有字符串的内容每次都会更改,即使长度也会更改,但只有一些内容会更改,比如第一个字符串中的符号和值的名称。还应该注意的是,我们想要从第三个字符串中得到的八个字母总是在第五个“与”符号之后。你知道吗

我已经尝试过很多次了,我的代码是基于互联网上的研究,但是我还没有得到一致的结果,所以,我来这里是想问,如果可能的话,最有利的方法是什么,还有一些例子。先谢谢你。:)

第一个字符串的另一个示例。你知道吗

if (X1079) { clearTimeout (X1079); X1079 = null; }
X781 ('<FORM name="X58" method="POST" action="http://us23.chatzy.com/31039888252154"><DIV style="display:none;"><INPUT type="hidden" name="X1" value="218"></DIV><DIV style="display:none;"><INPUT type="hidden" name="X579" value="1"></DIV><DIV style="display:none;"><INPUT type="hidden" name="X691" value="MzEwMzk4ODgyNTIxNTQmMzEwMzk4ODgyNTIxNTQmMCZYMTY4JjE0MjI1NTY0MjcmVUZWS0VPUUEmYXl5JkZGRkZGRiYmMSYzJjEmdXdvb2RsZXM3Nzc2QGpvdXJyYXBpZGUuY29tJjd6c3AwJjE0MjI4MDM4NDMmJjAm"></DIV></FORM>');

Tags: 字符串namedivformcomnone内容input
1条回答
网友
1楼 · 发布于 2024-03-28 15:27:23

这是一种re方法:

import re
import base64

data = """
if (X1079) { clearTimeout (X1079); X1079 = null; }
X781 ('<FORM name="X58" method="POST" action="http://us23.chatzy.com/31039888252154"><DIV style="display:none;"><INPUT type="hidden" name="X1" value="218"></DIV><DIV style="display:none;"><INPUT type="hidden" name="X579" value="1"></DIV><DIV style="display:none;"><INPUT type="hidden" name="X691" value="MzEwMzk4ODgyNTIxNTQmMzEwMzk4ODgyNTIxNTQmMCZYMTY4JjE0MjI1NTY0MjcmVUZWS0VPUUEmYXl5JkZGRkZGRiYmMSYzJjEmdXdvb2RsZXM3Nzc2QGpvdXJyYXBpZGUuY29tJjd6c3AwJjE0MjI4MDM4NDMmJjAm"></DIV></FORM>');"""

# Find length of characters starting with value=" and over 50 chars long
base64str = re.search("value=\"(\w{50,})\"", data).group(1)

# Decode
s = base64.decodebytes(base64str.encode()).decode(errors="ignore")

# Find section after 5th &
out = re.search("(.+?&){5}(.+?)&", s).group(2)

print(out)

另一种第一种re.search是:

# Find the pattern name="X691" value="<base64 stuff>"
base64str = re.search("name=\"X691\" value=\"(\w+)\"", data).group(1)

这可能效果更好,这取决于输入长度的变化程度。你知道吗

第一个例子输出JYIGINVM,第二个例子输出UFVKEOQA。然而,根据你的输入变化的程度,你可能需要增加更多的智能。你知道吗

相关问题 更多 >