我在Python 3.3中有一个小程序的问题,它应该从字符串返回一个数字。
虽然它适用于正值,但
text = "XXXXXXX\nDateMinEnd=230\nXXXXXXX\n"
Dmin = re.search('(?<=DateMinEnd=)\w+',text)
Dmin_res = int(Dmin.group())
print(Dmin_res)
230
有&#34;无&#34;负值的结果:
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,但不幸的是我无法找到解决方案)。提前感谢你。
安德烈亚斯
答案 0 :(得分:6)
如果您只需要支持整数,可以在-
前面添加一个可选的\w
:
Dmin = re.search('(?<=DateMinEnd=)-?\w+',text)
此外,\w
也匹配非数字,因此您可能希望使用\d
(对于数字):
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
答案 1 :(得分:5)
尝试在正则表达式中添加可选的减号:
Dmin = re.search('(?<=DateMinEnd=)-?\w+', text)
-
是减号本身,?
标记可能有一个或零减号(换句话说,它是可选的)。
答案 2 :(得分:1)
-
未捕获 \w
。我会做这样的事情:
Dmin = re.search('DateMinEnd=(.*)', text)
答案 3 :(得分:0)
-
不是单词(\w+
)
要搜索所有类型,请将\w+
替换为.+
答案 4 :(得分:0)
您需要告诉正则表达式-
符号是可选的,如果它存在,则捕获它。
所以你的表达应该是('(?<=DateMinEnd=)(-?\d+)'
我将\w+
更改为\d+
,因为您正在寻找数字,而不是单词。 -?
使-
成为可选项,表达式周围的( )
使其成为捕获组。
现在你得到:
>>> re.search('(?<=DateMinEnd=)(-?\d+)', text).group()
'-230'