2

我在 Python 3.3 中的一个小程序有问题,它应该从字符串中返回一个数字。

虽然它适用于正值,

text = "XXXXXXX\nDateMinEnd=230\nXXXXXXX\n"
Dmin = re.search('(?<=DateMinEnd=)\w+',text)
Dmin_res = int(Dmin.group())
print(Dmin_res)
230

负值有“无”结果:

text = "XXXXXXX\nDateMinEnd=-230\nXXXXXXX\n"
Dmin = re.search('(?<=DateMinEnd=)\w+',text)
Dmin_res = int(Dmin.group())

'NoneType' object has no attribute 'group'

我真的是一个初学者,所以我会很感激任何提示(当然,在询问您并尝试原始字符串和几个特殊转义之前,我查看了http://docs.python.org/2/library/re.html ,但不幸的是我无法找到解决方案)。提前谢谢你。

安德烈亚斯

4

5 回答 5

6

如果您只需要对整数的支持,您可以-在您的前面添加一个可选\w

Dmin = re.search('(?<=DateMinEnd=)-?\w+',text)

此外,\w还匹配非数字,因此您可能希望使用\d(for digit ) 代替:

Dmin = re.search('(?<=DateMinEnd=)-?\d+',text)

编辑

如果您需要对非整数的支持,请使用以下正则表达式:

Dmin = re.search('(?<=DateMinEnd=)-?\d*\.?\d+',text)

让我们分解一下:

-?  # optional negation
\d* # zero or more digits
\.? # optional decimal point (. is special so we need to escape it)
\d+ # one or more digits
于 2013-08-01T07:20:54.457 回答
5

尝试在正则表达式中添加一个可选的减号:

Dmin = re.search('(?<=DateMinEnd=)-?\w+', text)

-是减号本身,并?标记可能有一个或零个减号(换句话说,它是可选的)。

于 2013-08-01T07:20:33.803 回答
1

-不被捕获\w。我会做这样的事情:

Dmin = re.search('DateMinEnd=(.*)', text)
于 2013-08-01T07:22:06.560 回答
0

-不是一个词(\w+

搜索所有类型,替换\w+.+

于 2013-08-01T07:21:25.743 回答
0

您需要告诉正则表达式该-符号是可选的,如果存在,则捕获它。

所以你的表达应该是('(?<=DateMinEnd=)(-?\d+)'

我改成\w+\d+因为你在寻找数字,而不是文字。使可选,并且围绕表达式-?使其成为捕获组。-( )

所以现在你得到:

>>> re.search('(?<=DateMinEnd=)(-?\d+)', text).group()
'-230'
于 2013-08-01T07:22:06.943 回答