2015-02-19 2 views
1

В python 2 я хотел бы взять строку и сохранить ее в массиве с разделителем, являющимся заменой слов/чисел на символы, а также пробелами или прогибами наоборот. Надеясь на функцию, которая может это сделать. Пример:Отдельные слова/цифры из символов в Python

"54 3 'hello world' 5+4" 

вернется

["54", "3", "'hello world'", "5", "+", "4"] 

Я использовал re.findall(r"[\w']+", text), чтобы получить список всех слов/чисел, разделенных, но я застрял, когда речь заходит о получении символы разобрали.

+1

Вы пробовали что-нибудь? –

+0

Нет встроенной функции для обработки этого случая, вам нужно создать ее для вас. И вы имели в виду 'магазин', а не' sort'? – ZdaR

+0

Я использовал 're.findall (r" [\ w '] + ", Script)', чтобы получить список всех слов/чисел, разделенных, но я застрял, когда дело доходило до того, что символы были отсортированы. @Bhargav Rao – Leafthecat

ответ

2

Возможно, вам удастся использовать обходной путь, как показано ниже, но вы не указали все возможные символы.

>>> import re 
>>> s = "54 3 'hello world' 5+4" 
>>> re.findall(r"('[^']*'|\w+|[^\w\s]+)", s) 
['54', '3', "'hello world'", '5', '+', '4'] 

Более строгий способ сделать это было бы:

>>> re.findall(r"('[^']*'|[a-z0-9]+|[^a-z0-9\s]+)", s, re.I) 
+0

Это замечательно, спасибо! – Leafthecat

2
import re 
x="""54 3 'hello world' 5+4""" 
print [x for x in re.split(r"[ ](?![^']*'(?:[^']*'[^']*')*[^']*$)|([+*-])",x) if x] 

Вы можете попробовать это через re module.

+0

Желание я мог бы принять более одного ответа, приятную работу! – Leafthecat

+0

@BhargavRao сделал это прямо на моем компиляторе. Не волнуйся, это работает :) – vks

+0

Мои извинения, ха-ха, у меня почти нет репутации, и для голосования требуется 15, я пересматриваю и повышу, когда у меня будет 15 репутации. – Leafthecat

2

Вы можете разделить со следующим рисунком:

>>> [i for i in re.split(r'(?<![a-zA-Z]) |([\+\-\*\\])',s) if i] 
['54', '3', "'hello world'", '5', '+', '4'] 

(?<![a-zA-Z]) является negative look behind, что разделенное на основе пространств, которые не предшествовавших любым символом слова!

+0

Спасибо за ответ, ваш работает отлично, но я могу только принять его. :) – Leafthecat

+0

Пересмотрите на 15 репутации;) –

+0

@ user15888 добро пожаловать! все нормально! ;) – Kasramvd