gpt4 book ai didi

python re,提取逗号之间的值

转载 作者:行者123 更新时间:2023-11-30 23:31:37 24 4
gpt4 key购买 nike

为什么下一个正则表达式在'a'和'b'之间返回空字符串?

In [48]: pat = re.compile(".*?(?=,|$)")

In [49]: it = pat.findall('a,b')

In [50]: it
Out[50]: ['a', '', 'b', '']

如何提取逗号之间的子字符串?

编辑:我很好奇如何使用正则表达式来做到这一点。

编辑:正则表达式应成功提取此输入“,,”中的树空字符串。

最佳答案

  • .*? 首先匹配 a,因为下一个字符是 ,
  • 正则表达式引擎现在位于 , 之前的位置。
  • 现在,.*? 匹配 , 之前的空字符串(因为星号允许零长度匹配)。
  • 正则表达式引擎在零长度匹配后前进一个字符(它必须这样做,否则会永远卡在此处)。
  • .*? 现在与 b 匹配,因为我们位于字符串的末尾。
  • 正则表达式引擎现在位于字符串的末尾。
  • .*? 匹配字符串末尾之前的空字符串。
  • 字符串已用完。正则表达式引擎结束。

最好的解决方案是简单地用逗号分隔。

如果您坚持使用正则表达式,那就有点复杂了,因为(根据 docs ),re.findall() 包含空匹配,除非它们触及开头另一场比赛。这意味着我们必须使用 positive lookbehind assertion而不是您使用的前瞻。

这又意味着我们无法在同一个断言中检查分隔符和字符串开头 anchor ,因为 Python 不允许在后行中使用可变宽度正则表达式(叹气)。但也有可能是这样的:

>>> re.findall("(?:^|(?<=,))[^,]*", "a,b,,c")
['a', 'b', '', 'c']

关于python re,提取逗号之间的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19795873/

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