Python 我有一个regex语句可以从文本文件中提取所有数字,但它只能在文件中的81个数字中找到77个

Python 我有一个regex语句可以从文本文件中提取所有数字,但它只能在文件中的81个数字中找到77个,python,regex,Python,Regex,我有一个文本文件,里面有很多数字,小数点后16位。总共有81个数字。整个文件中都有逗号和方括号,所以我(对正则表达式是新手)试图用逗号和方括号去掉数字。简单地说,我需要一个正则表达式,它可以让卡片查找具有1个数字(正数或负数)的数字,后跟一个十进制数,再后跟16个数字。文本文件中数字格式的一些示例:-0.1234567690987654或0.7564738273839182。对不起,我没有任何不匹配的数字示例,但我可以保证所有数字的书写方式与我刚才给出的两个示例相同 我已经尝试过将其作为字符串加

我有一个文本文件,里面有很多数字,小数点后16位。总共有81个数字。整个文件中都有逗号和方括号,所以我(对正则表达式是新手)试图用逗号和方括号去掉数字。简单地说,我需要一个正则表达式,它可以让卡片查找具有1个数字(正数或负数)的数字,后跟一个十进制数,再后跟16个数字。文本文件中数字格式的一些示例:-0.1234567690987654或0.7564738273839182。对不起,我没有任何不匹配的数字示例,但我可以保证所有数字的书写方式与我刚才给出的两个示例相同

我已经尝试过将其作为字符串加载,在括号和逗号处拆分,但所有这些方法都没有那么优雅,占用了更多的行。这就是我选择学习正则表达式的原因

from re import findall

File = open("Data.txt", 'r')
Data = File.read()
File.close()

Values = findall(r"(-\d\.|\d\.)(\d{16})", Data)


Data = [float(Item[0] + Item[1]) for Item in Values]

for Thing in Data:
    print(Thing)

print(len(Data))
据我所知,我的正则表达式语句将查找和编号,前面是“-”或否,后面是句点,后面还有16个数字(例如-0.123456766890987654或0.7564738273839182)。下面是我正在处理的文件的一个简短片段

[[-0.8433461106676767, 0.5111623521263733, -0.39797568745771605,
0.8150308209141626, -0.9157151911545942, -0.4870281951128881],
[0.49680176773207174, -0.18390655568106262...
当我打印len(数据)时,我得到77。我计算了文件中的数字(并计算了我放在那里的数字),结果都是81。因此,没有找到4个数字。更多信息:这些数字是随机产生的,所以两个数字完全相同的可能性很小。我不确定这是否有区别,因为调用的函数名为“findall”。我想要的(按重要性排序)是:

  • 为什么这不起作用
  • 适用于此场景的正则表达式是什么样子的

  • 您编写的正则表达式正在运行,它正在查找模式匹配:

    • 负号(可选)
    • 一位数
    • 小数点(.)
    • 小数点后的16位数字
    考虑到您的数字是随机的,其中一些(统计上大约10%)有最后一位数字
    0
    ,但没有打印出来,因此它们只有15位(或更少!)

    如果数据是在Python中生成的,可能还会有一些数字在小数点后超过16位,但是您的模式会将它们截断为16位


    解决方案可能只是允许任意数量的数字:
    -?\d\.\d+

    也许有些数字只有15位或更少?如果你只需要一个团队,为什么你必须匹配团队
    r“(?\d\.\d{16})”
    。这样就没有问题了。正则表达式是正确的。您不能将文本文件解析为JSON并将其视为列表吗?有很多在线正则表达式测试程序,您可以使用它们来查看不匹配的内容。我猜是{16}引起了这个问题,看看
    (?\d\.\d+)
    是否获得了所有匹配项。查看输入数据,也许调用
    ast.literal\u eval(input\u string)
    ?@Jimmy这显然是数据问题。抢手货