Как выделить определенный текст между другим текстом в Python? - PullRequest
1 голос
/ 28 июня 2019

Вот пример строки:

text = "hello, i like to eat beef 'sandwiches' and beef 'jerky' and chicken 'patties' and chicken 'burgers' and also chicken 'fingers' and other chicken 'meat' too."

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

Я был озадачен тем, как даже отделить одну. Я могу разделить после "chicken ', но как потом выбрать текст доследующее '?

Я бы хотел перебрать список, чтобы сохранить переменные в массиве. Спасибо за любую помощь, которую вы можете предоставить.

Ответы [ 4 ]

2 голосов
/ 28 июня 2019

Вы можете использовать регулярные выражения:

import re

text = "hello, i like to eat beef 'sandwiches' and beef 'jerky' and chicken 'patties' and chicken 'burgers' and also chicken 'fingers' and other chicken 'meat' too."

match = re.findall(r'chicken \'(\S+)\'', text)
print (match)

Выходы:

['patties', 'burgers', 'fingers', 'meat']
1 голос
/ 28 июня 2019

Это хороший вариант использования для регулярных выражений.

import re
print(re.findall(r"chicken '(.*?)'", text))

Вот объяснение регулярного выражения: https://regex101.com/r/8IdseD/1

Вот код Python: https://repl.it/repls/SquareQuerulousModes

Регулярное выражение, часть за частью:

  • chicken ' - соответствует этому буквальному тексту
  • ( - запускает группу захвата - часть, которая будет * плевать re.findallout.
  • . - соответствует любому символу ...
  • *? - ... любое количество раз, но как можно меньше (это гарантирует, что мы не захватимфинал ')
  • ) - конец группы захвата
  • ' - совпадение с литералом '.

Итак re.findallвыдаст список всех подстрок, захваченных в группе.

0 голосов
/ 28 июня 2019

Выберите только часть предложения из первого вхождения "курица":

chicken_text = text[text.find("chicken"):]

Разделить этот текст на пробелы:

chicken_words = chicken_text.split(" ")

Сканирование списка на наличие слов, которые начинаются и заканчиваются одинарной кавычкой:

for word in chicken_words:
    if word[0] == "'" and word[-1] == "'":
        print word[1:-1]

Это не сработает, если слова в одинарных кавычках сами содержат пробелы, но в приведенном вами примере текста это не так.

0 голосов
/ 28 июня 2019

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

(?<=chicken\s')[^']+(?=')
  • (?<=chicken\s') - это положительный взгляд нулевой ширины, который соответствует chicken '
  • [^']+ соответствует части до следующей одинарной кавычки, то есть искомой подстроки

  • (?=') является положительным прогнозом нулевой ширины, который соответствует ' после желаемой подстроки

* * Пример тысячи двадцать-одина: * ** 1023 тысячу двадцать две *

In [713]: text = "hello, i like to eat beef 'sandwiches' and beef 'jerky' and chicken 'patties' and chicken 'burgers' and also chicken 'fingers' and other chicken 'meat' too."                             

In [714]: re.findall(r"(?<=chicken\s')[^']+(?=')", text)                                                                                                                                                    
Out[714]: ['patties', 'burgers', 'fingers', 'meat']
...