如何在不设置Python中同一行上两个单词之间的分隔符的情况下在两个数字之间设置分隔符?

时间:2011-04-23 14:13:55

标签: python delimiter

我有以下代码:

text = 'hello world 2,000 3,000'
text = text.replace(' ', '|')
print text

输出结果为:

hello|world|2,000|3,000

我想使用'|'分隔但我希望输出在三列。我不希望单词分开,只是数字中的单词:

hello world|2,000|3,000

我该怎么做?

3 个答案:

答案 0 :(得分:3)

使用正则表达式替换:

import re

text = 'hello world 2,000 3,000'
print re.sub(r'\s(\d)', '|\\1', text)

这只会为以空格和数字开头的事物插入管道标记。

答案 1 :(得分:2)

您有三个以空格分隔的字段,第一个字段也可能包含空格。您可以将rsplit与maxsplit参数一起使用,将字符串拆分为右侧的三个部分。

text = 'hello world 2,000 3,000'

# Split at the two rightmost spaces, so that
# the leftmost of the three fields can contain spaces
parts = text.rsplit(' ', 2) # ['hello world', '2,000', '3,000']

result = '|'.join(parts) # 'hello world|2,000|3,000'

答案 2 :(得分:1)

如果你不想要正则表达式,你可以这样做: 这假设您有许多输入行并将它们全部放在列表列表中。 它返回一个列表列表,其中每个元素都是正确解析的字符串。

这仅假设您的字段由空格分隔,并且您希望在前两个字段之间没有管道。

# one line of input
text = 'hellow world 1,000 2,000'
testlist = text.split(' ')

# all your input
list_of_all_text = [testlist] + [testlist] + [testlist]

first_feilds = map(lambda x: x[0]+' '+x[1],list_of_all_text)
last_feilds = map(lambda x: x[2:],list_of_all_text)
all_feilds = map(lambda x,y: [x]+y,first_feilds,last_feilds)
parsed_feilds = map(lambda x: '|'.join(x),all_feilds)
print parsed_feilds

或者可读性更低,更紧凑:

text = 'hellow world 1,000 2,000'
testlist = text.split(' ')
list_of_all_text = [testlist] + [testlist] + [testlist]
map(lambda x: '|'.join(x),map(lambda x,y: [x]+y,map(lambda x: x[0]+' '+x[1],list_of_all_text),map(lambda x: x[2:],list_of_all_text)))