我可能在这里遗漏了一些非常基本的东西,但这里有:
我使用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;忘记检查这个错字,就像我一样。
答案 0 :(得分:2)
你的r
已经在引号内了,所以你没有得到一个“原始字符串”,而是收到一个带有'r'
的字符串......
id_int = re.findall('r\d+',newstr)
# ^
# should be:
id_int = re.findall(r'\d+',newstr)
您的“控制台”版本也只会获取找到的第一个匹配项,而不是附加整个列表的“脚本”版本。