re.findall在控制台中工作但不在脚本中工作?

时间:2015-08-09 01:42:10

标签: python regex findall

我可能在这里遗漏了一些非常基本的东西,但这里有:

我使用Python 2.7和regex来识别字符串中的数字。

在控制台中,我输入:

>>> newstr = 'NukeNews/File_132.txt'
>>> int(re.findall(r'\d+',newstr)[0])
132

这是我的期望。

然而,在我正在运行的脚本中,我将字符串存储在字典中,并用字形表示。我正在运行这个脚本:

news_id=[]

for line in line_vec:
    print linedict[line]
    newstr= linedict[line]
    id_int = re.findall('r\d+',newstr)
    print id_int
    news_id.append(id_int)

这是一个很长的列表,但输出如下:

NukeNews/File_132.txt
[]

所以 - 注册了正确的字符串,但它与任何内容都不匹配。

我之前调用了列表中的第一项(以匹配int(re.findall(r'\d+',newstr)[0])的控制台输入,但脚本告诉我正则表达式没有找到字符串中任何数字的实例。我希望这会回来:
     NukeNews / File_132.txt      [' 132']

知道为什么它没有按预期工作?当我尝试运行re.match(r'/d+',newstr)时,我也得到一个空组(按照https://docs.python.org/2/library/re.html上的组示例)。

修改:正如所指出的,这是一个不小心使用'r'r'*'的情况。我只是想把它留下来以防其他人谷歌搜索"为什么我的正则表达式在控制台工作但不在脚本中#34;忘记检查这个错字,就像我一样。

1 个答案:

答案 0 :(得分:2)

你的r已经在引号内了,所以你没有得到一个“原始字符串”,而是收到一个带有'r'的字符串......

id_int = re.findall('r\d+',newstr)
#                    ^
# should be:
id_int = re.findall(r'\d+',newstr)

您的“控制台”版本也只会获取找到的第一个匹配项,而不是附加整个列表的“脚本”版本。