Редактировать: Я должен добавить, что строка в тесте должна содержать все возможные символы (т.е. * + $ § € / и т. Д.).Поэтому я подумал, что регулярное выражение должно помочь лучше всего.
Я использую регулярное выражение, чтобы найти все символы между определенными символами (["и"]. Мой пример выглядит так:
test = """["this is a text and its supposed to contain every possible char."],
["another one after a newline."],
["and another one even with
newlines
in it."]"""
Предполагаемый вывод должен быть таким:
['this is a text and its supposed to contain every possible char.', 'another one after a newline.', 'and another one even with newlines in it.']
Мой код, включая регулярное выражение, выглядит следующим образом:
import re
my_list = re.findall(r'(?<=\[").*(?="\])*[^ ,\n]', test)
print (my_list)
И мой результат следующий:
['this is a text and its supposed to contain every possible char."]', 'another one after a newline."]', 'and another one even with']
, поэтому есть две проблемы:
1) он не удаляет "]
в конце текста, как я хочу, чтобы он делал с (?="\])
2) он не захватывает третий текст в скобках, угадайте из-за перевода строки.Но до сих пор я не смог их запечатлеть, когда я попробую .*\n
, он возвращает мне пустую строку.
Я благодарен за любую помощь или подсказки по этому вопросу.Заранее благодарим.
Кстати, используя Python 3.6 на anaconda-spyder и новейшее регулярное выражение (2018).
РЕДАКТИРОВАТЬ 2: Одно изменение в тесте:
test = """[
"this is a text and its supposed to contain every possible char."
],
[
"another one after a newline."
],
[
"and another one even with
newlines
in it."
]"""
Еще раз у меня возникли проблемы с удалением новой строки, думаю, пробелы можно удалить с помощью \ s, поэтому регулярное выражение может решить эту проблему, подумал я.
my_list = re.findall(r'(?<=\[\S\s\")[\w\W]*(?=\"\S\s\])', test)
print (my_list)
Но это возвращает толькопустой списокКак получить предполагаемый вывод выше из этого ввода?