使用re和base64模块对字符串的一部分进行Base64解码
有没有人能演示一下,怎么用正则表达式来解码字符串中的某一部分为base64格式?我希望最后的结果是返回整个字符串,但把base64的部分解码了。
在类别标签和子类别标签之间的文本应该被解码,然后返回整个字符串。
<attack_headline><site_id>1</site_id><category>U1FMIEluamVjdGlvbg==</category><subcategory>Q2xhc3NpYyBTUUwgQ29tbWVudCAmcXVvdDstLSZxdW90Ow==</subcategory><client_ip>192.168.1.102</client_ip><date>1363807248</date><gmt_diff>0</gmt_diff><reference_id>E711-3EFB-5F43-5FAC</reference_id></attack_headline>
2 个回答
0
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,但其实只要理解了背后的原理,就能更轻松地解决它们。
比如说,当你在写代码时,可能会发现某些功能没有按照预期工作。这时候,首先要做的就是仔细检查你的代码,看看是否有拼写错误或者逻辑上的问题。很多时候,问题就藏在这些小细节里。
另外,了解你使用的工具或库的文档也是非常重要的。文档通常会提供使用方法和常见问题的解决方案,这能帮助你更快地找到答案。
总之,遇到问题时不要慌张,先冷静下来,逐步排查,通常就能找到解决办法。
events = client.service.get_recent_attacks("",epoch_time_last,epoch_time_now,1,"",15)
text = re.sub('(?<!<\/attack_headline>)\s*\n\s*', '', events)
xml = lxml.etree.fromstring(text)
for tag_with_base64 in ('category','subcategory'):
node = xml.find(tag_with_base64)
node.text = base64.b64decode(node.text)
lxml.etree.tostring(xml)
1
根据我的评论,这里有一个使用 lxml.etree
的例子,这个例子假设你的输入是 XML 格式(如果是 HTML 格式,就用 lxml.html
)。
>>> import base64
>>> import lxml.etree
>>> text = "<attack_headline><site_id>1</site_id><category>U1FMIEluamVjdGlvbg==</category><subcategory>Q2xhc3NpYyBTUUwgQ29tbWVudCAmcXVvdDstLSZxdW90Ow==</subcategory><client_ip>192.168.1.102</client_ip><date>1363807248</date><gmt_diff>0</gmt_diff><reference_id>E711-3EFB-5F43-5FAC</reference_id></attack_headline>"
>>> xml = lxml.etree.fromstring(text)
>>> for tag_with_base64 in ('category','subcategory'):
... node = xml.find(tag_with_base64)
... if node:
... node.text = base64.b64decode(node.text)
>>> lxml.etree.tostring(xml)
'<attack_headline><site_id>1</site_id><category>SQL Injection</category><subcategory>Classic SQL Comment &quot;--&quot;</subcategory><client_ip>192.168.1.102</client_ip><date>1363807248</date><gmt_diff>0</gmt_diff><reference_id>E711-3EFB-5F43-5FAC</reference_id></attack_headline>'