re.findall在控制台中工作,但不是在脚本中?
问题描述:
我可能错过了这里非常基本的东西,但这里有: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上搜索“为什么我的正则表达式在控制台中工作,而不是在脚本中工作”,忘记检查这个错字,就像我一样。
答
你有你的r
引号内这样反而得到一个“原始字符串”的你要在它的'r'
串...
id_int = re.findall('r\d+',newstr)
# ^
# should be:
id_int = re.findall(r'\d+',newstr)
你的“控制台”的版本也只将第一个找到的匹配与附加整个列表的“脚本”版本进行比较。
哦,这就是令人生厌的。谢谢。这正是问题所在。 :) – zainksasdf