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

Я попробовал несколько ответов на этом сайте, но не повезло. Вот пример текста, с которым я работаю:

"Но если вы получили их сегодня," сказала Элизабет, "моя мать цель будет дан ответ. "

Она наконец вымогала у своего отца признание того, что лошади были помолвлены. Поэтому Джейн была вынуждена ехать верхом, и ее мать проводила ее до двери со многими веселыми прогнозами плохого дня. Ее надежды оправдались; Джейн не уехала долго до того как пошел сильный дождь Ее сестры были для нее непростыми, но ее мать был в восторге. Дождь продолжался весь вечер без антракт; Джейн, конечно, не могла вернуться.

"Это была моя удачная идея!" сказала миссис Беннет больше, чем однажды, как будто заслуга в том, чтобы дождь пошёл ей целиком. До на следующее утро, однако, она не знала о всей ее радости выдумка. Завтрак едва закончился, когда слуга из Нетерфилд принес Элизабет следующую записку:

"МОЯ ДОРОЖНАЯ ЛИЗЗИ, -

"Я чувствую себя очень плохо сегодня утром, что, я полагаю, должно быть вменяется в мое промокание до вчерашнего дня. Мои добрые друзья не будут услышать о моем возвращении, пока мне не станет лучше. Они настаивают также на моем видении Мистер Джонс - поэтому не пугайтесь, если вы услышите о его побывав мне - и, кроме боли в горле и головной боли, есть не так много со мной .-- Твой и т. д. "

«Ну, дорогой, - сказал мистер Беннет, когда Элизабет прочитала записку вслух: «если у вашей дочери опасный приступ болезни - если она должна умереть, было бы утешительно знать, что все это было в преследование мистера Бингли и по вашим приказам. "

"О! Я не боюсь ее смерти. Люди не умирают мало пустяки простудные. О ней позаботятся хорошо. Пока она остается там все очень хорошо. Я хотел бы пойти и увидеть ее, если бы я мог иметь каретка. "

Из этого примера я хотел бы извлечь

"But if you have got them to-day, my mother's purpose will be answered"
"This was a lucky idea of mine, indeed!" 
"MY DEAREST LIZZY,-- I find myself very unwell this morning, which, I suppose, is to be imputed to my getting wet through yesterday. My kind friends will not hear of my returning till I am better. They insist also on my seeing Mr. Jones--therefore do not be alarmed if you should hear of his having been to me--and, excepting a sore throat and headache, there is not much the matter with me.--Yours, etc." 
"Well, my dear,"

... и так далее. Правило, которое я пытаюсь использовать в регулярных выражениях:

1. get all strings within a " " (there can be multiple on the same line)
2. if the line ends with a \n before finding a second ", continue grabbing the next line so long as it also begins with a "

Ответы [ 3 ]

2 голосов
/ 17 апреля 2019

Возможно, это не то, что вы ищете, но вы можете попробовать это: RegexDemo

text = '''
"But if you have got them to-day," said Elizabeth, "my mother's purpose will be answered."

She did at last extort from her father an acknowledgment that the horses were engaged. Jane was therefore obliged to go on horseback, and her mother attended her to the door with many cheerful prognostics of a bad day. Her hopes were answered; Jane had not been gone long before it rained hard. Her sisters were uneasy for her, but her mother was delighted. The rain continued the whole evening without intermission; Jane certainly could not come back.

"This was a lucky idea of mine, indeed!" said Mrs. Bennet more than once, as if the credit of making it rain were all her own. Till the next morning, however, she was not aware of all the felicity of her contrivance. Breakfast was scarcely over when a servant from Netherfield brought the following note for Elizabeth:

"MY DEAREST LIZZY,--

"I find myself very unwell this morning, which, I suppose, is to be imputed to my getting wet through yesterday. My kind friends will not hear of my returning till I am better. They insist also on my seeing Mr. Jones--therefore do not be alarmed if you should hear of his having been to me--and, excepting a sore throat and headache, there is not much the matter with me.--Yours, etc."

"Well, my dear," said Mr. Bennet, when Elizabeth had read the note aloud, "if your daughter should have a dangerous fit of illness--if she should die, it would be a comfort to know that it was all in pursuit of Mr. Bingley, and under your orders."

"Oh! I am not afraid of her dying. People do not die of little trifling colds. She will be taken good care of. As long as she stays there, it is all very well. I would go and see her if I could have the carriage."
'''

talk = re.findall(r'\"([^\"]+?)(\"|\-\-\n)',text)
for t in talk:
    print(t[0])
1 голос
/ 17 апреля 2019

Этот RegEx может помочь вам достичь этого.Он разделит ваш текст на три группы:

(\")(.*)(\")

enter image description here

Если вы хотите передать \n, вы можете просто добавить его во вторуюгруппы, используя ИЛИ |, и обновите его как :

 (\")(.*|\n)(\")

enter image description here

0 голосов
/ 17 апреля 2019

В качестве примера вы можете использовать чередование :

"[^\n"]*"|"[^\n"]*\n+"[^"]*"
  • "[^\n"]*" Совпадение от открытия до закрытия двойной кавычки без совпадения с новой строкой
  • | Или
  • "[^\n"]*\n+"[^"]*" Совпадение от открывающей цитаты до закрывающей цитаты, только если первая новая строка начинается с двойной цитаты

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...