Использование str.split
на "print 'Hello, world!' times 3"
возвращает список ["print", "'Hello,", "world!'", "times", "3"]
. Однако мне нужен результат ["print", "'Hello, world!'", "times", "3"]
. Как я могу это сделать?Строка Tokenise, содержащая строковые литералы
ответ
Это регулярное выражение будет захватывать кавычки, если вы хотите их.
import re
s = "print 'hello, world!' 3 times"
re.findall(r'(\w+|\'.+\')',s)
Никакой модификации этого не было необходимо; он работал отлично. Большое спасибо :) –
Если вы собираетесь исключить слова в цитатах из расколоть, вы могли бы использовать shlex.split
:
import shlex
s = "print 'Hello, world!' times 3"
print(shlex.split(s))
# ['print', 'Hello, world!', 'times', '3']
Я собирался предложить str.split ("'"), который сохраняет одинарные кавычки - и все еще оставляет больше работы ... но это выглядит лучше –
Вау, очень полезная функция! Это можно легко изменить, чтобы обрабатывать повторное добавление кавычек с чем-то простым по строкам (если s содержит '' then s = '' '+ s +' ''), так что отлично ответил на мой вопрос. Благодаря! –
.split()
функция разбивает str
на основе разделителей. Разделитель по умолчанию - blank space
. Он не заботится о '
в вашей строке. Если вы хотите обрабатывать слова в пределах '
как одно слово. Вы должны использовать библиотеку shlex, или вы можете написать выражение regex
. Конечно, split()
- это не то, что вы ищете.
- 1. Строковые литералы
- 2. Строковые литералы и строковые объекты
- 3. $ "... {} ..." строковые литералы в C#?
- 4. Regex и строковые литералы
- 5. NSDictionary и строковые литералы
- 6. Нитки и строковые литералы
- 7. Строковые литералы и GC?
- 8. Необязательные многострочные строковые литералы
- 9. Java строковые литералы конкатенации
- 10. указатели и строковые литералы
- 11. «Forwarding» строковые литералы
- 12. Как строковые литералы создаются?
- 13. Строковые литералы в Java
- 14. Строковые литералы Unicode
- 15. Строковые литералы в c
- 16. переобъявлять строковые литералы
- 17. Строковые литералы C++?
- 18. как Java обрабатывает строковые литералы
- 19. C++ шаблон и строковые литералы
- 20. Оптимизирует ли компилятор строковые литералы?
- 21. Строковые литералы как аргумент методов
- 22. Строковые литералы в терминале psql
- 23. Интерпретированные строковые литералы в Go
- 24. Строковые литералы в C заканчиваются%?
- 25. строковые литералы в GO определения
- 26. Создание Django игнорировать строковые литералы
- 27. Doctests, которые содержат строковые литералы
- 28. Строковые литералы для имен файлов
- 29. Падающая строка, содержащая строковые значения в любом из нескольких столбцов
- 30. Java XML строковые литералы внезапно прекращается
* «довольно очевидно, что это не желаемый результат» * - вам, возможно. Выглядит хорошо, полагая, что все, что вы делаете, расщепляется на пробелы. Также это набор, а не список, поэтому заказ не гарантируется. – jonrsharpe
Regex - ваш ключ –
@NeilGatenby Извините, что означало 'foo.split()' ... Новое для Python, все еще запоминающее функции :) –