Регулярное выражение для поиска после определенного слова в строке - PullRequest
0 голосов
/ 05 марта 2020

Я использую регулярное выражение, чтобы найти несколько ключевых слов после двоеточия (:), и лучшее, что я до сих пор достиг:

пример теста

test {
    test1 {
        sadffd(test: "aff", aaa: "aa1") {}
    }
}

Теперь мне нужно найти ключевое слово в скобках (), и оно работает для 'aaa', но когда я добавляю test, это не удается, оно соответствует целым словам в строке.

мое регулярное выражение до сих пор

\btest(.*\w") (неудачный случай) ожидается "aff" возвращено "aff", aaa: "aa1"

\baaa(.*\w") (пройдено) возвращено "aa1"

пожалуйста, дайте мне знать, если вам нужна дополнительная информация

Ответы [ 3 ]

2 голосов
/ 05 марта 2020

Вы можете попробовать

:\s*"(.*?)"

И необходимые данные находятся в первой группе захвата.

Пояснение

:\s*"(.*?)"
:               colon
 \s*            followed by optionally any number of spaces
    "           followed by quote
     (   )      capturing group, containing...
      .*?           any number of character, matching as few as possible
          "     followed by quote

Демонстрация:
https://regex101.com/r/WnvzdG/1


Обновление: если вы хотите соответствовать ТОЛЬКО после указанных c ключевых слов, за которыми следует двоеточие, вы можете сделать что-то вроде:

(KEYWORD1|KEYWORD2|KEYWORD3)\s*:\s*"(.*?)"

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

1 голос
/ 05 марта 2020

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

("\w+")

Обратите внимание, что ваш вопрос выше говорит о том, что вы хотите захватить "aff", а не просто aff, поэтому Я включил окружающие цитаты в группу захвата.

Пример из regex101 :

enter image description here

Это довольно грубо, но это должно быть хорошо для ввода, который вы представили. (Это не будет обрабатывать такие вещи, как экранированные двойные кавычки в строке, например).

1 голос
/ 05 марта 2020

Еще один подход (выполняется в Python)

items = ['test{test1 {sadffd(test: "aff", aaa: "aa1") {}}}']
for item in items:
    print(re.findall(r'"(\w+)"',item))
    print(re.findall(r'(?<=: )"(\w+)"',item))

Выход

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