在regex re.search()模式中添加变量

时间:2015-04-07 22:31:39

标签: python regex

我正在尝试在regex模式中添加一个变量用于research(),例如:

xvar=100
answer= re.search(r'(<a href=")(.+count=xvar.+?)(")', subreddit).group(2)

但我收到错误:

    nexturl = re.search(r'(<a href=")(.+count=xvar.+?)(")', subreddit).group(2) AttributeError: 'NoneType' object has no attribute 'group'

我如何解决此问题以执行我想要的操作?

5 个答案:

答案 0 :(得分:2)

xvar=100
answer= re.search('(<a href=")(.+count=' + str(xvar) + '.*?)(")', subreddit).group(2)

xvar=100
answer= re.search('(<a href=")(.+count=%s.*?)(")' % xvar, subreddit).group(2)

xvar=100
answer= re.search('(<a href=")(.+count={0}.*?)(")'.format(xvar), subreddit).group(2)

有关格式化字符串的详细信息,请参阅https://mkaz.com/2012/10/10/python-string-format/

答案 1 :(得分:1)

您可以使用format,要处理异常,请使用try-except

xvar=100
try:
    answer= re.search(r'(<a href=")(.+count={}.+?)(")'.format(xvar), subreddit).group(2)
except AttributeError:
    print 'no match'

答案 2 :(得分:1)

使用字符串格式:

r'(<a href=")(.+count={}.+?)(")'.format(xvar)

答案 3 :(得分:1)

除了变量问题(您应该使用xvarint string转换为str()),我认为问题还在于使用.+?。如果您将其替换为.*?,则会获得匹配,并且group(2)可以访问。

试试这段代码:

import re

xvar=100
subreddit = r'<a href="something" count="100">Text</a>'
answer= re.search( r'(<a href=")(.+count="' + str(xvar) + r'.*?)(")', subreddit).group(2)

输出:

something" count="100

这是sample demo program in Python

答案 4 :(得分:0)

通常,有3种方法可以做到这一点(通常称为格式化或插值):

some_string = "dogs are cute :)"
# very basic, using concatenation: 
print "All " + some_string + " and go to heaven."
# Or, using the interpolate operator: 
print "All %s and go to heaven."    # Use %d for digits, %f for floats, %s for strings, etc. You have to be specific with the variable type. 
# Or use string format: 
print "All {} and go to heaven.".format(some_string)

格式被认为是“最好的”&#39;在大多数情况下练习,尽管你会在很多地方看到插值%。查看https://docs.python.org/2/library/stdtypes.html#string-formatting

的完整格式语法