【问题标题】:How to find a positive or negative value inside a string?如何在字符串中找到正值或负值?
【发布时间】:2013-08-01 07:18:27
【问题描述】:

我在 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 并尝试了原始字符串和几个特殊的转义,但不幸的是我找不到解决方案)。提前谢谢你。

安德烈亚斯

【问题讨论】:

  • 我不确定这是否重要,但请务必查看 python 3 文档,因为有些事情已经改变:docs.python.org/3.3/library/re.html
  • 感谢大家非常快速和宝贵的答案!谢谢@Ilmo Euro 的数字提示。

标签: python regex string


【解决方案1】:

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

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

此外,\w 也匹配非数字,因此您可能希望使用 \d(代表 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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      Dmin = re.search('DateMinEnd=(.*)', text)
      

      【讨论】:

        【解决方案4】:

        - 不是一个词(\w+)

        要搜索所有类型,请将\w+ 替换为.+

        【讨论】:

          【解决方案5】:

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

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

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

          所以现在你得到:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-06-09
            • 1970-01-01
            • 2021-05-21
            • 1970-01-01
            • 2015-11-01
            • 2015-10-28
            • 2022-06-17
            • 1970-01-01
            相关资源
            最近更新 更多