Захватить один суффикс, содержащий известную подстроку, когда найдено несколько совпадающих префиксов (без известной подстроки)

При вводе нескольких строк, некоторые из которых содержат префикс, мне нужно захватить один экземпляр подстроки "Foo" или "Bar" послеis:префикс независимо от того, сколько раз /is:Barилиis:Baz/ появляться.

Используя следующее регулярное выражение:.*is:\b([Foo|Bar]*)\b.*

И используя следующие примеры тестовых строк ввода с совпадениями:

      "is:Baz is:Foo FooBar"          # Captures "Foo"
"is:Foo FooBar is:Bar"          # Captures "Bar"
"is:Bar FooBar FooBaz Baz"      # Captures "Bar"
"FooBar is:Bar FooBaz"          # Captures "Bar"
"FooBar is:Xyzzy is:Foo"        # Captures "Foo
"is:Baz FooBar is:Foo"          # Captures "Foo"
"FooBar is:Foo is:Xyzzy"        # No capture

В последней строке я хочу также захватитьis:Foo, но захват сбрасываетсяis:Xyzzy. Это не исчерпывающий список возможных тестов, но он иллюстрирует проблему, с которой я столкнулся.

1 ответ

Вы можете написать шаблон, используя группировку без[и]который обозначает класс символов.

Здесь не нужна граница слова:\bкак это неявно из-за следующего чередования(Foo|Bar)

Вы можете добавить границу слова перед\bis

      .*\bis:(Foo|Bar)\b.*

См. демонстрацию regex101.

Другие вопросы по тегам