正则表达式:通过空格分割,同时将“”识别为令牌

时间:2013-12-28 01:20:17

标签: python regex python-2.7

我正在使用Python。对于以下文本,

foo boo " " cat

我想按空格分割,但" "应该是一个标记。

['foo', 'boo', '" "', 'cat']

这就是我想要的,但不容易做到。我的愚蠢方法是用非间隔符号替换" " ......但是,我相信只使用RE是可行的。

3 个答案:

答案 0 :(得分:3)

尝试shlex:

In [2]: import shlex

In [3]: string = 'foo boo " " cat'

In [4]: shlex.shlex(string)
Out[4]: <shlex.shlex at 0x7f3937aa7bd0>

In [5]: list(shlex.shlex(string))
Out[5]: ['foo', 'boo', '" "', 'cat']

答案 1 :(得分:2)

这在我的控制台中适用:

import re
txt = 'words words words " " words " words"'
split = re.split(' ^((?!" ").)*$', txt) #split on space not contained in double quotes

答案 2 :(得分:1)

一种不同的方法。

>>> import re
...
>>> s = 'foo boo " " cat foo "  " foo'
>>> parts = re.findall(r'(?:"[^"]*"|\S+)', s)

['foo', 'boo', '" "', 'cat', 'foo', '"  "', 'foo']