Если вам нужно чистое решение регулярных выражений, вы можете сделать это только с регулярным выражением .NET или Python PyPi, потому что вам нужны две вещи, которые обычно не предоставляются библиотеками регулярных выражений: 1) разбор строки ввода справа налево и 2) бесконечная ширинаlookbehind.
Вот решение Python:
import regex
text="Teaching psychology is the part of educational psychology that refers to school education. As will be seen later, both have the same objective: to study, explain and understand the processes of behavioral change that are produce in people as a consequence of their participation in activities educational What gives an entity proper to teaching psychology is the nature and the characteristics of the educational activities that exist at the base of the of behavioral change studied."
rx = r'(?rus)(?<!\b\1\b.*?)\b(\w+)\b'
print (list(reversed(regex.findall(rx, text))))
См. онлайн-демонстрацию .
Подробности
(?rus)
- r
включает синтаксический анализ входных строк справа налево (все шаблоны в регулярном выражении соответствуют слева направо, как обычно, поэтому тексты совпадений не инвертируются), u
в Python2 используется, чтобы \w
знал о Юникоде, это опция по умолчанию в Python 3, s
- это модификатор DOTALL, делающий .
разрывы строк совпадений (?<!\b\1\b.*?)
- нет совпадения, если непосредственно кСлева от текущего местоположения есть любые 0+ символов, а затем тот же текст, что и в группе 1 (см. далее в выражении), как целое слово \b(\w+)\b
- целое слово, 1+ словосимволы в границах слова.
reversed
is используется для печати слов в исходном порядке, поскольку регулярное выражение справа налево сопоставляет их от конца к началу.