繁体   English   中英

在python中使用re.findall()的问题

[英]Problems with using re.findall() in python

我正在尝试解析文本文件并从中提取某些整数。 我的文本文件中的每一行都是这种格式:

a和b

其中a是整数,b可以是浮点数或整数

例如。 '4和10.2356'或'400和25'

我需要同时提取a和b。 我正在尝试使用re.findall()来做到这一点:

print re.findall("\d+", txt)[0]  #extract a

#Extract b           
try:
    print float(re.findall("\d+.\d+", txt)[1])
except IndexError:
    print float(re.findall("\d+.\d+", txt)[0])

txt是文件中的一行。 try和except块的原因如下:

如果a是一位数字整数,例如 4,代码的try部分仅返回b。 但是,如果a不是一位整数,例如。 400,代码的try部分返回a和b。 我发现这很奇怪。

但是,我不知道如何修改上面的代码以提取b为整数的情况。 我尝试在现有的except块中进行另一次尝试,而bock除外,但这给了我奇怪的结果(在某些情况下,a和b被串联了)。 请帮帮我。

另外,有人可以告诉我\\ d +和\\ d +。\\ d +之间的区别,以及为什么\\ d +。\\ d +返回400而不是4的原因,即使两者都是整数。

只需将匹配为小数部分的模式作为可选即可。

>>> s = '4 and 10.2356'
>>> re.findall(r'\d+(?:\.\d+)?', s)
['4', '10.2356']
>>> print(int(re.findall(r'\d+(?:\.\d+)?', s)[0]))
4
>>> print(float(re.findall(r'\d+(?:\.\d+)?', s)[1]))
10.2356
  • \\d+匹配一个或多个数字。
  • \\d+.\\d+匹配一个或多个数字加上任何单个字符再加上一个或多个数字。
  • \\d+\\.\\d+与一个或多个数字字符匹配一个文字点加一个或多个数字。
  • \\d+(?:\\.\\d+)? 匹配整数和浮点数,因为我们将匹配小数部分的模式作为可选。 ? 捕获或非捕获组之后,会将整个组转换为可选组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM