Python中复杂字符串的动态拆分

2024-10-02 10:34:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直很难组织一个能以我想要的方式处理字符串的函数。我已经研究了之前的几个问题123以及我已经整理过的其他问题。这是设置,我有一个结构良好但可变的数据,需要从从文件中读取的字符串分割到字符串数组。以下是我正在处理的一些数据示例

('Vdfbr76','gsdf','gsfd','',NULL),
('Vkdfb23l','gsfd','gsfg','ggg@df.gf',NULL),
('4asg0124e','Lead Actor/SFX MUA/Prop designer','John Smith','jsmith@email.com',NULL),
('asdguIux','Director, Camera Operator, Editor, VFX','John Smith','',NULL),
...
(492,'E1asegaZ1ox','Nysdag_5YmD','145872325372620',1,'long, string, with, commas'),

我想将这些字符串基于逗号进行拆分,但是字符串中偶尔会包含逗号,这会导致问题。除此之外,开发一个精确的re.split(regex, line)变得很困难,因为在整个读取过程中,每行中的项目数都会发生变化。在

一些我已经尝试过的解决方案。在

^{pr2}$

这将给出一个结果,其中我们有以下输出

 regex_string
 return_line

然而,这种方法的主要问题是,它偶尔会将两个字段聚集在一起。如果是数组中的第三个值。在

(.*?),(.*),(.*),(.*),(.*),(.*)
['', '\t(222', "'Vy1asdfnuJkA','Ndfbyz3_YMD'", "'14541242640005471'", '2', "'Hello World!')", '', '\n']

理想结果如下:

['', '\t(222', "'Vy1asdfnuJkA'", "'Ndfbyz3_YMD'", "'14541242640005471'", '2', "'Hello World!')", '', '\n']

这是一个很小的变化,但它对结果有很大的影响。我试图操纵正则表达式字符串以更好地适应我正在尝试的操作,但随着我解决的每一个案件,另一个不幸地打破了它。在

另一个例子是用户aroncronin在本文4中提出的,如下所示

def split_at(text, delimiter, opens='<([', closes='>)]', quotes='"\''):
result = []
buff = ""
level = 0
is_quoted = False

for char in text:
    if char in delimiter and level == 0 and not is_quoted:
        result.append(buff)
        buff = ""
    else:
        buff += char

        if char in opens:
            level += 1
        if char in closes:
            level -= 1
        if char in quotes:
            is_quoted = not is_quoted

if not buff == "":
    result.append(buff)

return result

结果如下:

["\t('Vk3NIasef366l','gsdasdf','gsfasfd','',NULL),\n"]

主要的问题是它是同一个字符串。这让我陷入了一个反馈循环。在

理想结果如下:

[\t('Vk3NIasef366l','gsdasdf','gsfasfd','',NULL),\n]

任何帮助都是感激的,我不知道在这种情况下最好的方法是什么。我也很乐意澄清出现的任何问题。我尽可能的完整。在


Tags: 数据字符串inifisnot数组result
1条回答
网友
1楼 · 发布于 2024-10-02 10:34:02

使用^{}'s ^{}!在

from ast import literal_eval

s = """('Vdfbr76','gsdf','gsfd','',NULL),
('Vkdfb23l','gsfd','gsfg','ggg@df.gf',NULL),
('4asg0124e','Lead Actor/SFX MUA/Prop designer','John Smith','jsmith@email.com',NULL),
('asdguIux','Director, Camera Operator, Editor, VFX','John Smith','',NULL),
(492,'E1asegaZ1ox','Nysdag_5YmD','145872325372620',1,'long, string, with, commas'),
"""

for line in s.split("\n"):
    line = line.strip().rstrip(",").replace("NULL", "None")
    if line:
        print list(literal_eval(line))  #list(..) is just an example

输出:

^{pr2}$

相关问题 更多 >

    热门问题