gpt4 book ai didi

Python re.split() 在空格上同时以原子方式处理带引号的字符串

转载 作者:行者123 更新时间:2023-11-30 23:21:55 26 4
gpt4 key购买 nike

所以我以前见过这个主题的讨论,但要求总是比我需要的宽松一些。我正在寻找的是一个正则表达式模式,它将在空格上分割,同时以原子方式处理引用的子字符串。但是,我正在寻找一种解决方案:

  1. 是一个单个正则表达式模式和一个单个对re.split()的调用,因为...
  2. 我需要它与 maxsplit 参数一起使用。

示例:

s = 'chat "john doe" Use "foo or bar",   not  "baz and gruz" .'

results = re.split(PATTERN, s, maxplit=2)

结果应该是:

['chat', '"joe doe"', 'Use "foo or bar",   not  "baz and gruz" .']

到目前为止,我见过的此类问题的所有解决方案都涉及 re.findall() 或列表推导式,以从 re.split() 的结果中提取空字符串,这两种方法都消除了使用最大分割功能。我不想编写自己的函数来执行 maxsplit 已经使用 re.split() 所做的事情 - 在这个用例中,其重要方面是多个空格在超过maxsplit 边界,如我的示例所示。

编辑:所以我找到了一种方法来适应以前的解决方案:

def mysplit(s, maxsplit=0):
PATTERN = r"(\s|\".*?\"|'.*?')"
return [p for p in re.split(PATTERN, s, maxsplit=maxsplit) if p.strip()]

最佳答案

您可以在此处使用Negative Lookahead:

>>> import re
>>> s = 'chat "john doe" Use "foo or bar", not "baz and gruz" .'
>>> results = re.split(r' +(?![^"]*"(?:(?:[^"]*"){2})*[^"]*$)', s, 2)
>>> results

['chat', '"john doe"', 'Use "foo or bar", not "baz and gruz" .']

关于Python re.split() 在空格上同时以原子方式处理带引号的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24747753/

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