正则表达式无法获取两个字符串之间的字符串。Python 27

4
从此URL中查看源代码:https://www.amazon.com/dp/073532753X?smid=A3P5ROKL5A1OLE 我想获得var iframeContent =obj.onloadCallback = onloadCallback;之间的字符串。
我有这个正则表达式:iframeContent(.*?)obj.onloadCallback = onloadCallback; 但它不起作用。我不擅长正则表达式,请原谅我的缺乏知识。
我甚至尝试了iframeContent(.*?)obj.onloadCallback,但它也不起作用。

你说的“它不起作用”是什么意思?请发布一个http://stackoverflow.com/help/mcve示例,并尝试从原始数据中摘录您认为必须匹配的字符串。亚马逊页面拥挤,可能存在多个匹配点,因此很难帮助您实现此问题中所需的内容。 - Luis Colorado
3个回答

3

我怀疑输入字符串跨越了多行。尝试在搜索语句中添加re.M(例如:re.findall('someString', text_Holder, re.M))。


3
看起来你只需要那个巨大的编码字符串。我认为你的失败原因有两个。第一,你没有在DOTALL模式下运行,这意味着你的“.”不能跨越多行匹配;第二,你的正则表达式因为灾难性回溯而失败,当你有一个非常长的可变长度匹配时,它会匹配与其后面相同的字符。这应该可以得到你想要的结果。
m = re.search(r'var iframeContent = \"([^"]+)\"', html_source)
print m.group(1)

正则表达式只是在两个双引号之间查找除双引号 [^"] 以外的任何字符。由于变量长度匹配和紧随其后的匹配不匹配任何相同的字符,因此您不会遇到灾难性回溯问题。

那个有效了。能否简单解释一下正则表达式的含义,将不胜感激。 - Umair Ayub

2
你可以尝试使用这个正则表达式:
``` (?<=iframeContent =)(.*)(?=obj.onloadCallback = onloadCallback) ```
你可以在这个网站上进行测试。
很重要的一点是,你需要使用`DOTALL`模式,这意味着你将会有单行的文本。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接