Выберите подстроку после вхождения слов - PullRequest
0 голосов
/ 21 февраля 2019

У меня есть следующая строка s:

s = "this is a test <#1> that can be a very good test (#2) to look at [#3] test [#4], but also computer <#4> and test"

Как вы можете видеть, это обычное предложение, которое содержит квадратные скобки вида <...>, (...) или [..] с подстроками между скобками.

Я хочу извлечь подстроки в скобках, предполагая, что скобка следует после либо слова test, либо computer.Другими словами, я хочу следующий вывод:

[["test", "#1"], ["test", "#2"], ["test", "#4"], ["computer", "#4"]]

Пока это то, что у меня есть: я могу использовать регулярное выражение для определения местоположения в скобках, например

import re
re.findall(re.compile("<.*?>"), s)

Но сейчасМне нужно обобщить это, чтобы искать [..], (..), а также и только в тех случаях, когда скобка идет после слова test или computer.Можно ли достичь этого с помощью регулярного выражения?

1 Ответ

0 голосов
/ 21 февраля 2019

Попробуйте этот шаблон:

(test|computer)\s[\[\(<](.*?)[\]\)>]

Итак, код будет:

import re
pattern = r'(test|computer)\s[\[\(<](.*?)[\]\)>]'
print(re.findall(re.compile(p), s))

Вывод:

[('test', '# 1'), ('test', '# 2'), ('test', '# 4'), ('computer', '# 4')] *

Однако это предполагает, что у вас будетодин пробел, между test и #1.Если вы хотите сопоставить несколько пробелов, измените шаблон на \s+.

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