gpt4 book ai didi

python - 使用正则表达式分隔符拆分字符串,除非分隔符被转义

转载 作者:行者123 更新时间:2023-11-28 21:04:32 24 4
gpt4 key购买 nike

我有一个代码(将“Z”视为转义字符,将“,”视为分隔符):

import re

a = 'aaa,bbbZ,cccZZ,dddZZZ,eee'
print re.split(r'(?<!Z)[,]+', a)

结果是:

['aaa', 'bbbZ,cccZZ,dddZZZ,eee']

但我需要处理转义序列的结果(在我的示例中转义字符是“Z”):

['aaa', 'bbbZ,cccZZ', 'dddZZZ,eee']

当我尝试使用可变宽度模式进行否定后视断言时:

print re.split(r'(?<!(ZZ)*Z)[,]+', a)

它说:

sre_constants.error: look-behind requires fixed-width pattern

最佳答案

您可以使用一种模式来匹配序列,该模式将匹配任何非逗号的字符,或匹配任何 1+ 个逗号并以奇数 Z 开头的任何字符小号:

import re
a = 'aaa,bbbZ,cccZZ,dddZZZ,eee'
print(re.findall(r'(?:(?<!Z)Z(?:ZZ)*,+|[^,])+', a))
# => ['aaa', 'bbbZ,cccZZ', 'dddZZZ,eee']

参见 Python demo和一个 regex demo .

图案细节:

  • (?:(?<!Z)Z(?:ZZ)*,+|[^,])+ - 出现 1 次或多次:
    • (?<!Z)Z - 一个 Z不紧跟Z
    • (?:ZZ)* - ZZ 的零个或多个序列
    • ,+ - 1个或多个逗号
    • | - 或者
    • [^,] - 任何不是逗号的字符

PyPi regex module , 你可以使用 regex.split使用 (?<=(?<!Z)(?:ZZ)*),+ 的方法正则表达式:

import regex
a = 'aaa,bbbZ,cccZZ,dddZZZ,eee'
print(regex.split(r'(?<=(?<!Z)(?:ZZ)*),+', a))
# ['aaa', 'bbbZ,cccZZ', 'dddZZZ,eee']

参见 another online Python demo .

这里,模式匹配 1 个或多个逗号 ( ,+ ),这些逗号前面有任何 0+ 个 ZZ 序列。前面没有另一个 Z (即,偶数个 Z )。

关于python - 使用正则表达式分隔符拆分字符串,除非分隔符被转义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45144688/

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