2015-08-09 122 views
0

我可能错过了这里非常基本的东西,但这里有:re.findall在控制台中工作,但不是在脚本中?

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

任何想法,为什么它如预期不工作,当我尝试运行re.match(r'/d+',newstr)我也得到一个空的组(以下上https://docs.python.org/2/library/re.html组为例)

编辑:正如指出的,t他是一个不小心'r'r'*'的情况。我只是为了防止其他人在Google上搜索“为什么我的正则表达式在控制台中工作,而不是在脚本中工作”,忘记检查这个错字,就像我一样。

回答

2

你有你的r引号内这样反而得到一个“原始字符串”的你要在它的'r'串...

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

你的“控制台”的版本也只将第一个找到的匹配与附加整个列表的“脚本”版本进行比较。

+0

哦,这就是令人生厌的。谢谢。这正是问题所在。 :) – zainksasdf

相关问题