我有一个CSV文件,其中管道用作分隔符. 但有时,第三个管道后面会有一个短子字符串:它后面最多有两个字母数字字符.则不应将第三个竖线解释为分隔符.
示例:在每个管道上拆分:
x1 = "as234-HJ123-HG|dfdf KHT werg|XXL|s45dtgIKU|2017-SS0|123.45|asUJY"
=&>;在XXL之后拆分,因为它后面跟的字符超过2个
示例:如果管道3和4之间的字符少于3个,则在所有管道上拆分,第3个除外:
x2 = "as234-H344423-dfX|dfer XXYUyu werg|1g|z4|sweDSgIKU|2017-SS0|123.45|YTf"
x3 = "as234-H3wer23-dZ|df3r Xa12yu wg|a1|2|sweDSgIKU|2017-SS0|123.45|YTf"
=>;将"1g|Z4"和"A1|2"放在一起.
我的正则表达式try 只用于这样的子字符串替换:如果它发现竖线在两位数之间:3|4=>;3-4,则用连字符替换竖线.
x = re.sub(r'(?<=\d)\|(?=\d)', repl='-', string=x1, count=1).
我的问题是: 如果在第三个管道之后跟随不超过1或2个字符的short个字母数字子字符串(如Bx、2、42、z或3b),则re.plit应忽略第三个管道并继续第四个管道.除#3以外的所有其他管道都是无条件分隔符.