Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式在不同长度的空间后捕获数字_Python_Regex - Fatal编程技术网

Python 正则表达式在不同长度的空间后捕获数字

Python 正则表达式在不同长度的空间后捕获数字,python,regex,Python,Regex,我尝试使用一个非捕获组来检测空格(在我需要的数字之前),并且不将空格带入我的结果中,所以我使用 (?:1+)\d*?\d* 要处理我的文本: input: kMPCV/epS4SgFoNdLo3LOuClO/URXS/5 134.686356921 2018-06-14 21:50:35.494 input: pRVh7kPpFbtmuwS1NILiCzwHUVwJ4NcK 839.680408921 2018-06-14 22:13:39.996 in

我尝试使用一个非捕获组来检测空格(在我需要的数字之前),并且不将空格带入我的结果中,所以我使用

(?:1+)\d*?\d*

要处理我的文本:

 input: kMPCV/epS4SgFoNdLo3LOuClO/URXS/5         134.686356921  2018-06-14 21:50:35.494
 input: pRVh7kPpFbtmuwS1NILiCzwHUVwJ4NcK         839.680408921  2018-06-14 22:13:39.996
 input: Ga7MIXmXAsrbaEc1Yj60qYYblcRQpnpz         4859.688276920  2018-06-14 23:02:11.125
 input: 4mqdb5njytfDOFpgeG3XS0Iv1OXFPEnb        1400.684675920  2018-06-14 23:33:42.031
试着弄到数字

但是第2行和第3行不返回任何结果,第1行和第4行返回前面有1个空格的数字:“134.686356921”

为什么我会得到不同的结果?代码如下:

import re
def calcprice(filename):

    try:
        print ('ok')
        f = open(filename, 'r')
        data = f.read()
        rows = data.split('\n')

        for row in rows:
            print (re.search("[(?: 1+)\d*\.?\d*][1]",row))


    except Exception as e:
        print(e)


if __name__ == "__main__": ## If we are not importing this:
    calcprice('dfk balance.txt')
结果:

没有

没有


您当前的正则表达式基本上是一个大字符集:

这没有多大意义,看起来像是对正则表达式工作原理的误解。如果您想匹配数字,则可能需要在后面查找两个空格,匹配数字和句点,并在前面查找另两个空格:

(?<=  )[\d.]+(?=  )
(?您的正则表达式由一个

如果要匹配的数字始终包含一个点,则可以使用a和正数来断言后面的是空白:

如果它也可以没有点,您可以使用lookrounds检查前导空格和尾随空格,并使匹配点和一个或多个数字的部分可选
(?:\。\d+)

尝试正则表达式
\b(\d+[\d\.]*)\b

您的正则表达式与您尝试执行的操作不一致。这是非常错误的。

尝试以下模式:
+(\d+(\。\d+)+)+

说明:模式将匹配前面的数字和后面的一个或多个空格(
+
)。它将匹配带有可选小数部分(
(\.\d+)
)的数字,这将成为匹配中的第二个捕获组(但您无论如何都不需要它)

在每次比赛中,第一个捕获组
\1
将是您的号码


如果您的文件格式是固定的,您可以使用
split()
来代替正则表达式。好的,find 1+是完全错误的。。
(?<=  )[\d.]+(?=  )
for row in rows:
    print (re.search(r"(?<=  )[\d.]+(?=  )",row))