2011-04-04 74 views
1

我有一个字符串:的Python:将字符串分割的话,节省分离

'Specified, if char, else 10 (default).' 

我想把它分成两个元

words=('Specified', 'if', 'char', 'else', '10', 'default') 

separators=(',', ' ', ',', ' ', ' (', ').') 

有没有人有这样一个快速的解决方案?

PS:这个符号'-'是一个字分隔符,而不是字

+0

你能给我们一套完整的分隔符?目前,我们知道'['',',','(',')。']'。还有更多吗?或者,或许应该将每个不是字母数字的字符视为分隔符?你需要更具体。 – 2011-04-04 18:03:14

+0

除了托马斯提出的问题之外,是否有一个原因,即括号是用空格分组的,但逗号不是? – 2011-04-04 18:05:05

+0

我已经为我重写了正则表达式现在它使用非字母数字字符作为分隔符'^ [a-Z0-9]' – Dan 2011-04-06 08:51:41

回答

4
import re 
line = 'Specified, if char, else 10 (default).' 
words = re.split(r'\)?[, .]\(?', line) 
# words = ['Specified', '', 'if', 'char', '', 'else', '10', 'default', ''] 
separators = re.findall(r'\)?[, .]\(?', line) 
# separators = [',', ' ', ' ', ',', ' ', ' ', ' (', ').'] 

如果你真的想要的元组将结果传递在tuple(),如果你不想words也有空条目(从逗号和空格之间),使用以下命令:

words = [x for x in re.split(r'\)?[, .]\(?', line) if x] 

words = tuple(x for x in re.split(r'\)?[, .]\(?', line) if x) 
1

的一部分,您可以使用正则表达式这一点。

>>> a='Specified, if char, else 10 (default).' 
>>> from re import split 
>>> split(",? ?\(?\)?\.?",a) 
['Specified', 'if', 'char', 'else', '10', 'default', ''] 

但是在这个解决方案中,您应该自己编写该模式。如果你想使用这个元组,你应该把它的内容转换为这个解决方案中的正则表达式模式。

1

正则表达式来找到所有分隔符(假定任何非字母数字

import re 
re.findall('[^\w]', string) 
+1

我在我的解决方案中使用了正则表达式,谢谢=) – Dan 2011-04-07 10:14:55

0

我大概会先将空格上的.split()放入列表中,然后遍历列表,使用正则表达式检查字边界后面的字符。

import re 
s = 'Specified, if char, else 10 (default).' 
w = s.split() 
seperators = [] 
finalwords = [] 
for word in words: 
    match = re.search(r'(\w+)\b(.*)', word) 
    sep = '' if match is None else match.group(2) 
    finalwords.append(match.group(1)) 
    seperators.append(sep) 
0

在通获得两个分离器和文字,你可以使用的findall如下:

import re 
line = 'Specified, if char, else 10 (default).' 
words = [] 
seps = [] 
for w,s in re.findall("(\w*)([), .(]+)", line): 
    words.append(w) 
    seps.append(s) 
0

这里是我的裂纹吧:

>>> p = re.compile(r'(\)? *[,.]? *\(?)') 
>>> tmp = p.split('Specified, char, else 10 (default).') 
>>> words = tmp[::2] 
>>> separators = tmp[1::2] 
>>> print words 
['Specified', 'char', 'else', '10', 'default', ''] 
>>> print separators 
[', ', ', ', ' ', ' (', ').'] 

唯一的问题是,你可以有一个''words的末尾或开头,如果在句子的开头/结尾处有一个分隔符,前后没有任何分隔符。但是,这很容易检查和消除。