Python使用正则表达式分割字符串

时间:2013-05-02 05:21:15

标签: python regex string split

我想用':'和''字符分割字符串。但是,我想忽略两个空格''和两个冒号'::'。例如。

text = "s:11011 i:11010 ::110011  :110010 d:11000"

应分成

[s,11011,i,11010,:,110011, ,110010,d,11000]

在python网站上关注正则表达式HOWTO后,我设法提出以下内容

regx= re.compile('([\s:]|[^\s\s]|[^::])')
regx.split(text)

然而,这不会按预期工作,因为它会拆分:和空格,但它仍然包含拆分中的':'和''。

[s,:,11011, ,i,:,11010, ,:,:,110011, , :,110010, ,d,:,11000]

我该如何解决这个问题?

编辑:如果是双倍空格,我只想要一个空格出现

4 个答案:

答案 0 :(得分:5)

请注意,这假设您的数据格式为X:101010

>>> re.findall(r'(.+?):(.+?)\b ?',text)
[('s', '11011'), ('i', '11010'), (':', '110011'), (' ', '110010'), ('d', '11000')]

然后chain他们:

>>> list(itertools.chain(*_))
['s', '11011', 'i', '11010', ':', '110011', ' ', '110010', 'd', '11000']

答案 1 :(得分:3)

>>> text = "s:11011 i:11010 ::110011  :110010 d:11000"
>>> [x for x in re.split(r":(:)?|\s(\s)?", text) if x]
['s', '11011', 'i', '11010', ':', '110011', ' ', '110010', 'd', '11000']

答案 2 :(得分:2)

使用正则表达式(?<=\d) |:(?=\d)进行拆分:

>>> text = "s:11011 i:11010 ::110011  :110010 d:11000"
>>> result = re.split(r"(?<=\d) |:(?=\d)", text)
>>> result
['s', '11011', 'i', '11010', ':', '110011', ' ', '110010', 'd', '11000']

这将分开:

(?<=\d)一个空格,当左边有一个数字时。要检查这一点,我使用lookbehind assertion

:(?=\d)冒号,右边有一个数字。要检查这一点,我使用lookahead assertion

答案 3 :(得分:0)

看看这种模式:

([a-z\:\s])\:(\d+)

它会为您提供您期望的相同阵列。无需使用拆分,只需访问正则表达式引擎返回的匹配项。

希望它有所帮助!