获取两个不同的开始和结束分隔符之间的所有子字符串

Posted

技术标签:

【中文标题】获取两个不同的开始和结束分隔符之间的所有子字符串【英文标题】:Get all substrings between two different start and ending delimiters 【发布时间】:2020-08-06 03:12:38 【问题描述】:

我正在 Python 3 中尝试获取给定字符串 a 的所有子字符串的列表,这些子字符串在分隔符 x 之后开始,在分隔符 y 之前结束。 我找到了只让我第一次出现的解决方案,但结果需要是所有出现的列表。

start = '>'
end = '</'
s = '<script>a=eval;b=alert;a(b(/XSS/.source));</script><script>a=eval;b=alert;a(b(/XSS/.source));</script>'"><marquee><h1>XSS by Xylitol</h1></marquee>'
print((s.split(start))[1].split(end)[0])

上面的例子是我到目前为止所得到的。但我正在寻找一种更优雅、更稳定的方式来获取所有的事件。

因此,作为列表的预期返回将包含以下条目的 javascript 代码:

a=eval;b=alert;a(b(/XSS/.source));
a=eval;b=alert;a(b(/XSS/.source));

【问题讨论】:

这能回答你的问题吗? Parsing html using Python 遗憾的是,我实际上正在使用 Beautiful Soup 和 Esprima。另一方面,输入字符串不必包含可以解析的完整 HTML 结构。它们宁愿是包含 XSS Paylods 的 URL,因此可以包含 Javascript。我需要手动从 URL 中提取所有 标签。 【参考方案1】:

在字符串中寻找模式对于正则表达式来说似乎是一项不错的工作。 这应该返回一对&lt;script&gt;&lt;/script&gt; 之间的任何内容的列表:

import re
pattern = re.compile(r'<script>(.*?)</script>')
s = '<script>a=eval;b=alert;a(b(/XSS/.source));</script><script>a=eval;b=alert;a(b(/XSS/.source));</script>\'"><marquee><h1>XSS by Xylitol</h1></marquee>'
print(pattern.findall(s))

结果:

['a=eval;b=alert;a(b(/XSS/.source));', 'a=eval;b=alert;a(b(/XSS/.source));']

【讨论】:

谢谢,这正是我所希望的!

以上是关于获取两个不同的开始和结束分隔符之间的所有子字符串的主要内容,如果未能解决你的问题,请参考以下文章

C# 正则表达式匹配具有分隔符的字符串

Oracle REGEXP_SUBSTR |获取两个分隔符之间的字符串

PB中取字符串子串的函数是啥

提取字符串中字符串分隔符之间的所有子字符串(C#)

PB中取字符串子串的函数是啥

两个分隔符之间的 grep 子字符串