Regex, чтобы получить слово рядом со всеми данными словами - PullRequest
0 голосов
/ 21 марта 2019

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

Пример предложения:

user = "panda" пытается получить доступ к resource = "system"

Слова для ввода: panda & system (то есть слово, расположенное рядом со словами «пользователь» и «ресурс»)

В настоящее время я использую это регулярное выражение (?<=name=\")(.*?)(?=\";), которое возвращает имя «панда». Я ищу запрос, который бы охватил как пользователя, так и ресурс в приведенном выше предложении.

Может ли кто-нибудь помочь с запросом регулярного выражения сделать это?

Ответы [ 2 ]

1 голос
/ 21 марта 2019

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

(?<=(?:user|resource)=\").*?(?=\")

Демо .

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

(?<=(?:user|resource)=\")[^"]*

Демоверсия # 2

1 голос
/ 21 марта 2019

просто простое регулярное выражение с ленивым соответствием должно выполнить эту работу

user="(.*?)".*resource="(.*?)"

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

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