Как я могу установить разделители между двумя числами, не устанавливая разделитель между двумя словами в одной строке в Python? - PullRequest
1 голос
/ 23 апреля 2011

У меня есть следующий код:

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 ]

3 голосов
/ 23 апреля 2011

Использовать замену регулярного выражения:

import re

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

При этом вставляется только отметка канала для вещей, которым предшествует пробел и цифра.

2 голосов
/ 23 апреля 2011

У вас есть три поля, разделенные пробелами, и первое поле может также содержать пробелы. Вы можете использовать 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'
1 голос
/ 23 апреля 2011

Если вы не хотите регулярное выражение, вы делаете это: Это предполагает, что у вас есть много строк ввода и помещая их все в список списков. Возвращает список списков, где каждый элемент является правильно проанализированной строкой.

Это предполагает только то, что ваши поля разделены пробелом, и вы не хотели бы иметь канал между первыми двумя полями.

# 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)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...