Как извлечь конкретную часть из текста - PullRequest
0 голосов
/ 17 июня 2019

У меня есть строка, содержащая много слов.Мне нужно извлечь конкретную часть из него.Ниже приведены подробности:

Предположим, у меня есть следующая строка:

x = "I am amartya ccccc amartya xxxxx amartya yyyyy amartya mohan tagore bvfvhbvbv amartya vfvbvbvfhv amartya"

Теперь я хочу извлечь содержимое между amartya и tagore, но этодолжно быть точно 'mohan', т. е. вопрос о происшествии входит в картину.Я использовал регулярное выражение, но это дало мне содержимое, как показано ниже: "ccccc amartya xxxxx amartya yyyyy amartya mohan", но я хочу только 'mohan' в качестве моего o / p.

Ответы [ 2 ]

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

Это регулярное выражение работает для вашего конкретного примера:

r = re.search("(amartya)(?!.*amartya.*tagore)(.*)(tagore)", x)
r.group(2).strip()

По сути, оно говорит: сопоставьте шаблон, начинающийся с «amartya» и заканчивающийся «tagore», и все, что между ними не содержит слова «amartya "снова.

Вторая группа - (.*), которая соответствует чему-либо между" amartya "и" tagore "

Из документов ( re ):

(?!...)

Соответствует, если ... не соответствует следующему.Это негативное предположение.Например, Isaac (?!Asimov) будет соответствовать 'Isaac ' только в том случае, если за ним не следует 'Asimov'.

Надеюсь, что это поможет.

1 голос
/ 17 июня 2019

в этом случае вы можете начать расщепление в «tagore», после чего разбить «amartya» и поймать последний фрагмент строки:

x = "I am amartya ccccc amartya xxxxx amartya yyyyy amartya mohan tagore bvfvhbvbv amartya vfvbvbvfhv amartya"

x1 = x.split('tagore')[0]
print(x1)
#I am amartya ccccc amartya xxxxx amartya yyyyy amartya mohan 
x2 = x1.split('amartya')[-1]
print(x2.strip(" "))
#mohan
...