2016-09-27 3 views
2

Использование str.split на "print 'Hello, world!' times 3" возвращает список ["print", "'Hello,", "world!'", "times", "3"]. Однако мне нужен результат ["print", "'Hello, world!'", "times", "3"]. Как я могу это сделать?Строка Tokenise, содержащая строковые литералы

+2

* «довольно очевидно, что это не желаемый результат» * - вам, возможно. Выглядит хорошо, полагая, что все, что вы делаете, расщепляется на пробелы. Также это набор, а не список, поэтому заказ не гарантируется. – jonrsharpe

+0

Regex - ваш ключ –

+1

@NeilGatenby Извините, что означало 'foo.split()' ... Новое для Python, все еще запоминающее функции :) –

ответ

1

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

import re 

s = "print 'hello, world!' 3 times" 
re.findall(r'(\w+|\'.+\')',s) 
+0

Никакой модификации этого не было необходимо; он работал отлично. Большое спасибо :) –

3

Если вы собираетесь исключить слова в цитатах из расколоть, вы могли бы использовать shlex.split:

import shlex 

s = "print 'Hello, world!' times 3" 
print(shlex.split(s)) 
# ['print', 'Hello, world!', 'times', '3'] 
+2

Я собирался предложить str.split ("'"), который сохраняет одинарные кавычки - и все еще оставляет больше работы ... но это выглядит лучше –

+0

Вау, очень полезная функция! Это можно легко изменить, чтобы обрабатывать повторное добавление кавычек с чем-то простым по строкам (если s содержит '' then s = '' '+ s +' ''), так что отлично ответил на мой вопрос. Благодаря! –

0

.split() функция разбивает str на основе разделителей. Разделитель по умолчанию - blank space. Он не заботится о ' в вашей строке. Если вы хотите обрабатывать слова в пределах ' как одно слово. Вы должны использовать библиотеку shlex, или вы можете написать выражение regex. Конечно, split() - это не то, что вы ищете.

Смежные вопросы