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

re.findall working in console but not in script?

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

我正在使用 Python 2.7 和正则表达式来识别字符串中的数字。

在控制台中,我输入:

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

这是我所期望的。

但是,在我的脚本 运行 中,我将字符串存储在字典 linedict 中。我是 运行 这个脚本:

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]) 的控制台输入,但脚本告诉我正则表达式没有在字符串中找到任何数字实例。我希望这个 return:
NukeNews/File_132.txt ['132']

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

编辑: 如前所述,这是对 'r'r'*' 不小心的情况。我只是打算留下这个,以防其他人谷歌搜索 "why does my regex work in console but not in script" 忘记检查这个错字,就像我一样。

您的 r 包含在引号内,因此您得到的不是 "raw string",而是包含 'r' 的字符串 ...

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

你的 "console" 版本也只接受找到的第一个匹配项,而你的 "script" 版本附加了整个列表。