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" 版本附加了整个列表。
我可能遗漏了一些非常基本的东西,但是这里是:
我正在使用 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" 版本附加了整个列表。