参见英文答案 >
How do I match any character across multiple lines in a regular expression? 21个
从此URL视图来源: https://www.amazon.com/dp/073532753X?smid=A3P5ROKL5A1OLE
我想在var iframeContent =和obj.onloadCallback = onloadCallback之间获取字符串;
从此URL视图来源: https://www.amazon.com/dp/073532753X?smid=A3P5ROKL5A1OLE
我想在var iframeContent =和obj.onloadCallback = onloadCallback之间获取字符串;
我有这个正则表达式iframeContent(.*?)obj.onloadCallback = onloadCallback;
但它不起作用.我不擅长正则表达式,所以请原谅我缺乏知识.
我甚至尝试过iframeContent(.*?)obj.onloadCallback但它不起作用.
解决方法
看起来你只想要那个巨大的编码字符串.我相信你的失败有两个原因.你没有在DOTALL模式下运行,这意味着你的.不会匹配多行,并且你的正则表达式因
catastrophic backtracking而失败,这可能发生在你有一个很长的可变长度匹配,匹配与后面的字符相同的字符时.
这应该得到你想要的
m = re.search(r'var iframeContent = \"([^"]+)\"',html_source) print m.group(1)
正则表达式只是在两个双引号之间寻找除双引号[^“]之外的任何字符.因为变量长度匹配和紧跟在它之后的匹配不匹配任何相同的字符,所以你不会遇到灾难性的回溯问题.