我有一个带有 javascript 的 html 页面 html中有一些js代码:
<script type="text/javascript">
var viewAllLimiter = 0;
</script>
如何找到 viewAllLimiter 并通过 re.search 获取其值?
我已经尝试过:
#hh2 - opened page with urllib2
re.search('var viewAllLimite = "(\w)"', hh2)
我需要如下输出:
var viewAllLimiter = 0;
或者我知道的任何其他我看到 viewAllLimiter 参数值的内容
最佳答案
实现此目的的一种方法是使用 re.findall
方法和组。这将返回一个列表,其中包含您的组作为成员。另外,如果您想将大于 9 的数字与正则表达式匹配,则需要在\w 之后添加一个“+”。另外,如果您确定该值始终是数字,最好使用\d+。
re.findall( r'(viewAllLimiter =) (\w+)', txt )
这将返回
[('viewAllLimiter =', '0')]
对于你的例子,但也会返回
[('viewAllLimiter =', '9924')]
如果该值是一个更大的数字。请注意列表内的元组。这是因为每个模式匹配都会得到一个元组,并且元组中的每一项都是您的组之一。使用正则表达式时要记住的最后一件事是,使用 raw strings 将为您省去很多麻烦。 (前导引号前面的r
)。
要匹配更通用的变量类,您可以使用以下正则表达式,
re.findall( r"""\s*(CATEGORY_ID)\s*=\s*((?:'|")?\w+(?:'|")?)""", txt )
只要您将要搜索的变量名称放在正则表达式的开头,它就会捕获引号(或不引号)中的任何内容。请注意,这会返回引号和值,例如 [('SKU', '"GRP05133"')]
。如果您只想要该值,可以将第二组紧紧围绕 \w+
部分。
re.findall( r"""\s*(CATEGORY_ID)\s*=\s*(?:'|")?(\w+)(?:'|")?""", txt )
如果我们分解这个正则表达式,它会显示:
"""
\s* # zero or more white spaces
(xxx) # the variable you're looking for
\s* # zero or more white spaces
= # an equal sign
\s* # zero or more white space
(?:'|")? # zero or one ' or " but non-capturing (i.e. don't store in group output)
(\w+) # the value of the variable
(?:'|")? # zero or one single quote OR zero or one double quote
"""
关于python - 在html页面中使用re模块搜索字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24775708/