2016-10-20 35 views
4

从这个网址查看源代码:https://www.amazon.com/dp/073532753X?smid=A3P5ROKL5A1OLE 我想要得到的字符串var iframeContent =obj.onloadCallback = onloadCallback;正则表达式无法在2个字符串之间获取字符串。 Python的27

之间我有这样的正则表达式iframeContent(.*?)obj.onloadCallback = onloadCallback;

但它不工作。我不擅长正则表达式,所以请原谅我缺乏知识。

我甚至试过iframeContent(.*?)obj.onloadCallback但它不起作用。

+0

你是什么意思与*它不工作就*?请发布http://stackoverflow.com/help/mcve示例,并尝试从原始数据摘录您认为必须匹配的字符串。一个亚马逊页面拥挤可能的匹配点,所以它会很难帮助你从这个问题得到你想要的。 –

回答

3

它看起来像你只是想要那个巨大的编码字符串。我相信你的失败有两个原因。您没有以DOTALL模式运行,这意味着您的.不会在多行中匹配,并且您的正则表达式因catastrophic backtracking而失败,这可能发生在您有一个长度可变的长度匹配,匹配的字符与跟随它的人。

这应该得到你想要的

m = re.search(r'var iframeContent = \"([^"]+)\"', html_source) 
print m.group(1) 

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

+0

工作。 正则表达式的一点解释将非常赞赏 – Umair

3

我怀疑输入字符串存在多行。尝试在搜索行中添加re.M(即re.findall('someString', text_Holder, re.M))。

2

你可以试试这个正则表达式太

(?<=iframeContent =)(.*)(?=obj.onloadCallback = onloadCallback)

你可以在this site测试检查。

难道你使用DOTALL模式非常重要,这意味着你将有单线

相关问题