一种方法是使用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
"""