Выражение регулярного выражения для поиска ключевых слов в строке вместе со следующими символами - PullRequest
0 голосов
/ 25 марта 2019

У меня есть несколько известных ключевых слов, например 'cat', 'dog', 'rat'.

У меня есть строка, которая может выглядеть примерно так:

'rat;dog,cat - browncatdog(black)ratratcatdog-whitecat:grey'

Мне нужно найти все ключевые слова и любые символы, которые следуют сразу за ними (не считая разделителей, таких как точка с запятой и запятая, а также следующее ключевое слово).

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

'rat', 'dog', 'cat - brown', 'cat', 'dog(black)', 'rat', 'rat', 'cat', 'dog-white', 'cat:grey'

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

Ответы [ 2 ]

0 голосов
/ 26 марта 2019

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

>>> s = "rat;dog,cat - browncatdog(black)ratratcatdog-whitecat:grey"
>>> re.split(r"[;,]+", re.sub(r"(cat|dog|rat)",r",\1",s))
['', 'rat', 'dog', 'cat - brown', 'cat', 'dog(black)', 'rat', 'rat', 'cat', 'dog-white', 'cat:grey']
0 голосов
/ 26 марта 2019

Попробуйте это

>>> [(f[0], f[1][0]) for f in re.findall(r'(rat|dog|cat)(.\w+)', 'rat;dog,cat - browncatdog(black)ratratcatdog-whitecat:grey') if re.match(r'(cat|dog|rat|[,;])', f[1]) is None]
[('cat', ':')]

С уважением,

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