Как отсканировать предложение в Python

Допустим, у меня есть текстовый файл:

As a manager, he told FIFA TV he communicates his messages in a measured way. “I’m not one of the lads,” Southgate explained.

Есть ли способ получить предложение внутри цитаты (") и сохранить это предложение как переменную? Я знаю, что должен использовать метод сканирования, но я новичок в языке Python и не знаю, как это сделать. Может ли кто-нибудь дать мне пример того, как хранить это?

Пожалуйста, взгляните на «Как извлечь строку между двойными кавычками»

Abhi 07.07.2018 05:56

Предложение внутри " содержит специальные символы, поэтому использование его в качестве имени переменной невозможно. Вам нужно будет добавить символы типа _, чтобы заполнить пробел, и ваша задача может быть выполнена. Также проверьте этот stackoverflow.com/questions/5036700/….

hygull 07.07.2018 06:03

Я бы предпочел не использовать такие модули, как re, обсуждаемые в этой теме, просто мое мнение, но я думаю, что они усложняют работу.

Elodin 07.07.2018 06:04

Я сомневаюсь, что вы хотите использовать строку в " в качестве имени переменной (динамически создавая переменные) или просто хотите присвоить это другой переменной?

hygull 07.07.2018 06:07

Я просто хочу получить строку внутри "и преобразовать ее другим методом @RishikeshAgrawani

Syafiqur Rahman 07.07.2018 06:20

Внутри строки, заключенной в ", может быть несколько подстрок или только 1?

hygull 07.07.2018 06:59

только 1 предложение внутри "

Syafiqur Rahman 07.07.2018 07:02

Хорошо, спасибо за обновление. Текст “I’m not one of the lads,” на самом деле не находится внутри ", поскольку он содержит . Убедитесь, что это " или ? Проверял в своем редакторе. Если это , то нам нужно добавить поддержку текстов utf-8, если это ", тогда все в порядке.

hygull 07.07.2018 07:23

если он использует «как? и если он использует» как? почему

Syafiqur Rahman 07.07.2018 07:27
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
4
9
2 443
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете сделать что-то вроде этого:

file = open("filename.txt","r") # Opens the file
sentence = file.readline().split() # ['A','s',' ','a',' ','m'...]
startQuote = sentence.index('"') # Finds first occurence
endQuote = sentence[startQuote::].index("'") # Finds first occurrence after first quote
stringSentence = ''.join(sentence[startQuote:endQuote:]) # Creates string with splicing

Если вы хотите, чтобы код учитывал «умные кавычки», вы можете упростить его до следующего:

file = open("filename.txt","r") # Opens the file
sentence = file.readline().split() # ['A','s',' ','a',' ','m'...]
startQuote = sentence.index(“) # Finds first occurence
endQuote = sentence.index(”) # Finds first occurrence of end quote
stringSentence = ''.join(sentence[startQuote:endQuote:]) # Creates string with splicing

Возможно, вам придется исправить некоторые ошибки в этом коде, так как я его не тестировал.

Надеюсь, это дает вам представление о том, что вам нужно делать.

это дает мне ошибку. указанная ошибка startQuote = предложение.index ("\" ") # Находит первое вхождение ValueError: '"' отсутствует в списке

Syafiqur Rahman 07.07.2018 06:17

Это может быть связано с тем, что цитаты, которые вы использовали в примере, не были кавычками. Это были «умные цитаты», если вы посмотрите внимательно, вы поймете, что я имею в виду. Они немного наклонены.

Elodin 07.07.2018 06:25
Ответ принят как подходящий

Если вы можете быть уверены, что в строках, которые вы пытаетесь разобрать, всегда есть две двойные кавычки, вы можете просто использовать str.split('"')[0] для извлечения того, что между ними.

>>> s = '''As a manager, he told FIFA TV he communicates his messages in a measured way. "I’m not one of the lads," Southgate explained.'''
>>> s.split('"')[1]
'I’m not one of the lads,'

Редактировать: Теперь я вижу, что ваша входная строка фактически использует наклонные двойные кавычки, и , а не стандартную двойную кавычку, ", и в этом случае я предлагаю вам вместо этого использовать следующее:

s = '''As a manager, he told FIFA TV he communicates his messages in a measured way. “I’m not one of the lads,” Southgate explained.'''
print(s[s.find('“') + 1:s.find('”')])

Это выводит:

I’m not one of the lads,

это просто разбиение предложения на слова. я имею в виду, чтобы предложение было внутри "

Syafiqur Rahman 07.07.2018 07:13

Пожалуйста, присмотритесь. Это правильно получает предложение между кавычками: I’m not one of the lads,. Я просто отредактировал свой ответ, чтобы его было легче читать.

blhsing 07.07.2018 07:17

не работает, даже когда я вставляю код ur. ошибка говорит IndexError: индекс списка вне допустимого диапазона

Syafiqur Rahman 07.07.2018 07:20

Теперь я понимаю, что это связано с тем, что ваша строка ввода фактически использует наклонные двойные кавычки, и , а не стандартную двойную кавычку, ".

blhsing 07.07.2018 07:22

они разные?

Syafiqur Rahman 07.07.2018 07:25

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

blhsing 07.07.2018 07:27

это работает. Спасибо друг. теперь что это за +1: s.find ('”')

Syafiqur Rahman 07.07.2018 07:32

Пожалуйста. s.find('“') возвращает индекс первого в строке, и, добавляя к нему единицу, мы получаем начальный индекс искомого предложения до конечного индекса, который находится с s.find('”').

blhsing 07.07.2018 07:35

Предположим, у вас есть строка текста в файле с именем предложение.txt.

sentence.txt

As a manager, he told FIFA TV he communicates his messages in a measured way. "I'm not one of the lads," Southgate explained.

Теперь вы можете попробовать приведенный ниже код, чтобы прочитать строку выше и извлечь подстроку, заключенную в " (двойные кавычки).

# -*- coding: utf-8 -*-
with open('sentence.txt', encoding='utf-8') as f:
    sentence = f.read().strip();

words = sentence.split('\"');

if len(words) == 3:
    string_in_double_quote = words[1];
    print string_in_double_quote # I'm not one of the lads,
else:
    print 'WARNING: String in text file does not have 2 double quotes, make sure to have it'

это работает, но вывод ПРЕДУПРЕЖДЕНИЕ, хотя я копирую и вставляю текст и код

Syafiqur Rahman 07.07.2018 07:47

Вставь мне свою строку, я проверю и обновлю. Позвольте мне проверить, в чем проблема.

hygull 07.07.2018 07:48

Это то, что у меня в Windows CMD, e:\Users\Rishikesh\Python3\Practice\DoubleQuoteStringSeparat‌​ion>python main.py I'm not one of the lads,.

hygull 07.07.2018 07:51

чувак, я просто вставил текст выше. Я использую Py 2.7

Syafiqur Rahman 07.07.2018 07:51

Фактически вы скопировали старый код (я забыл удалить [1]). Теперь попробуйте текущий код.

hygull 07.07.2018 07:57

Другие вопросы по теме