gpt4 book ai didi

Python 正则表达式解析字符串并返回元组

转载 作者:太空狗 更新时间:2023-10-29 17:11:01 24 4
gpt4 key购买 nike

我得到了一些可以使用的字符串。每个代表一个数据集,由数据集的名称和相关的统计信息组成。它们都有以下形式:

s= "| 'TOMATOES_PICKED'                                  |       914 |       1397 |"

我正在尝试实现一个函数,该函数将解析字符串并返回数据集的名称、第一个数字和第二个数字。有很多这样的字符串,每个字符串都有不同的名称和相关的统计信息,所以我认为最好的方法是使用正则表达式。这是我到目前为止所拥有的:

def extract_data2(s):
import re
name=re.search('\'(.*?)\'',s).group(1)
n1=re.search('\|(.*)\|',s)
return(name,n1,)

因此,我阅读了一些有关正则表达式的内容,并弄清楚了如何返回名称。对于我正在使用的每个字符串,数据集的名称都以 ' ' 为界,所以这就是我找到名称的方式。那部分工作正常。我的问题是获取数字。 我现在想的是尝试匹配一个模式,该模式前面有一个竖线('|'),然后是任何东西(这就是我使用 .* 的原因),然后是另一个竖线以尝试获得第一个数字。有谁知道我如何在 Python 中做到这一点? 我在上面的代码中尝试的第一个数字基本上返回整个字符串作为我的输出,而我只想得到数字。-我对编程很陌生,所以如果这个问题看起来很简单,我深表歉意,但我一直在努力阅读和搜索与我的情况接近的答案,但没有运气。我感谢任何帮助。这个想法是它将能够:

return(name,n1,n2)

这样当用户输入一个字符串时,它可以只解析字符串并返回重要信息。到目前为止,我在尝试获取数字时注意到它将数字作为字符串返回。反正有返回 n1 或 n2 只是一个数字吗?请注意,对于某些字符串,n1 和 n2 可以是整数或小数。

最佳答案

我会使用单个正则表达式来匹配整行,并将我想要的部分放在命名组 ( (?P<name>exampl*e)) 中。

import re
def extract_data2(s):
pattern = re.compile(r"""\|\s* # opening bar and whitespace
'(?P<name>.*?)' # quoted name
\s*\|\s*(?P<n1>.*?) # whitespace, next bar, n1
\s*\|\s*(?P<n2>.*?) # whitespace, next bar, n2
\s*\|""", re.VERBOSE)
match = pattern.match(s)

name = match.group("name")
n1 = float(match.group("n1"))
n2 = float(match.group("n2"))

return (name, n1, n2)

转换n1n2从字符串到数字,我使用 float功能。 (如果它们只是整数,我会使用 int 函数。)

我使用了 re.VERBOSE标记和原始多行字符串 ( r"""...""") 使正则表达式更易于阅读。

关于Python 正则表达式解析字符串并返回元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6260777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com