只有当某个字符不能直接跟在另一个特定字符后面时,才能将其拆分

时间:2014-03-20 23:13:22

标签: python string

我有以下代码行,它将字符串data2拆分为空白实例的列表:

string_list = data2.split()

但是,在某些数据中,日期格式为"28, Dec"。这里的代码是在我不想要它的日期和月份之间的空格上分割。有没有办法可以说“在白色空间上分裂,但如果它是在逗号之后就没有”?

4 个答案:

答案 0 :(得分:3)

您需要使用regular expressions

>>> re.split('(?<!,) ', 'blah blah, blah')
['blah', 'blah, blah']

从链接:

  

(?<!...)匹配如果字符串中的当前位置不在前面   通过匹配....这被称为负面的后观断言。   与正面的后观断言类似,包含的模式必须   只匹配一些固定长度的字符串。开始的模式   负面的lookbehind断言可能在开头时匹配   被搜索的字符串。

答案 1 :(得分:1)

re.split与负面的lookbehind表达式一起使用:

re.split(r'(?<!,)\s','I went on 28, Dec')
Out[53]: ['I', 'went', 'on', '28, Dec']

答案 2 :(得分:0)

您可以使用正则表达式进行拆分,并使用后视表达式来确保您不会在逗号前面的空白字符上拆分:

>>> import re
>>> s = 'foo bar 28, Dec bar baz'
>>> re.split('(?<!,)\s', s)
['foo', 'bar', '28, Dec', 'bar', 'baz']

答案 3 :(得分:0)

很抱歉重新发布这个帖子,但我试图解码sqlite单元格,对我来说似乎很奇怪。我解释一下。我试图将两个不同的数字编码到一个单元格中,方法是创建一个中间为0的字符串,然后将其数字化,例如: a=4 b=7 c=str(4)+'0'+str(7)

问题是当第一个数字是10时,所以我使用它 re.split('0([1-9])','1003') ['10','3','']

为什么我得到一个trhee lenght列表应该只是2?