如何在字符串中找到正值或负值?

时间:2013-08-01 07:18:28

标签: python regex string

我在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,但不幸的是我无法找到解决方案)。提前感谢你。

安德烈亚斯

5 个答案:

答案 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'