Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 正则表达式匹配,是否用分隔符标记分隔所有组?_Python_Regex_Python 3.x - Fatal编程技术网

Python 正则表达式匹配,是否用分隔符标记分隔所有组?

Python 正则表达式匹配,是否用分隔符标记分隔所有组?,python,regex,python-3.x,Python,Regex,Python 3.x,我有一个特殊的编码格式,我想要一个正则表达式来提取编码信息。我将“:”作为一个特殊字符,用于分隔不同的信息块。例如: s = 'P:1:a:3:test_data' s = 'P:1:::3:test_data' 应拆分为: ['P','1','a','3','test_data'] 我可以使用: s.split(':') 但是,我可以将一个“:”也进行编码,并且不会有超过1个“:”组合在一起,因此没有歧义。例如: s = 'P:1:a:3:test_data' s = 'P:1:::

我有一个特殊的编码格式,我想要一个正则表达式来提取编码信息。我将“:”作为一个特殊字符,用于分隔不同的信息块。例如:

s = 'P:1:a:3:test_data'
s = 'P:1:::3:test_data'
应拆分为:

['P','1','a','3','test_data']
我可以使用:

s.split(':')
但是,我可以将一个“:”也进行编码,并且不会有超过1个“:”组合在一起,因此没有歧义。例如:

s = 'P:1:a:3:test_data'
s = 'P:1:::3:test_data'
应提供:

['P','1',':','3','test_data']
在此处使用拆分“:”失败:

['P', '1', '', '', '3', 'test_data']
捕捉“:”的最佳方式是什么?我对正则表达式不是很在行,我知道正则表达式组可以使用“*+”匹配至少一个字符,但我对如何将它们组合在一起感到非常困惑。更好的是,没有regex还有更好的方法吗?我想我总是可以遍历数组,检查连续的空字符串并将它们组合到“:”。还有更优雅的方式吗


感谢您的特殊情况,您可以使用“反向环视”来限制要拆分的冒号?,该冒号是一个冒号,它的前后不同时跟有另一个冒号:

import re
s = 'P:1:a:3:test_data'
s1 = 'P:1:::3:test_data'

re.split("(?<!:):|:(?!:)", s)
# ['P', '1', 'a', '3', 'test_data']

re.split("(?<!:):|:(?!:)", s1)
# ['P', '1', ':', '3', 'test_data']

P:1:3:test_数据应该分成哪些部分?P、 1,:,:,3,test_data或P,1,::,3,test_data?您可以使用group正则表达式,我尝试过,它可以工作。@根据我使用的数据类型,永远不会出现这种情况。也就是说,P,1,:,:,3,测试数据是正确的行为。@fadysad没有捕捉中间的“:”