Как сопоставить множество строк, которые появляются в порядке следования, с регулярным выражением - PullRequest
0 голосов
/ 06 февраля 2019

Существует набор строк:

"foo","bar","baz", "boo", "123"

, которые появляются в тексте в случайном порядке, но числа появляются первыми:

Some text
     123 baz bar foo
     123 bar baz foo
     123 foo baz bar
Some other text

как мне сопоставить строку, где они появляютсяиспользуя регулярное выражение?

1 Ответ

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

Для выполнения задачи вы можете попробовать метод экранирования:

  1. Защитите строки, содержащие дубликаты, поскольку такие строки должны быть исключены.Затем вы можете удалить их, если необходимо.
  2. Сопоставить все строки, содержащие слова из набора.

Итак, пример текста:

Some text
     123 baz bar foo
     123 bar baz foo
     123 foo baz bar
     123 foo baz bar foo boo
     123 foo bar bar
     123 boo baz foo asdf
Some other text

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

(^.*(foo|bar|baz|boo|123).*\2)

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

Затем экранируйте эти строки с помощью замены с помощью регулярных выражений:

#SHIELD#\1

Мы получим следующий текст:

Some text
     123 baz bar foo
     123 bar baz foo
     123 foo baz bar
#SHIELD#     123 foo baz bar foo boo
#SHIELD#     123 foo bar bar
     123 boo baz foo asdf
Some other text

Или удалите эти строки, если необходимо.

Тогда мы сможем получить необходимые строки от остальных.Отметим их заменой:

Найти: ^(?!#SHIELD#)(\s*123.*(baz|bar|foo|boo).*)$

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

Заменить на: #MYLINE#\1

Получим текст:

Some text
#MYLINE#     123 baz bar foo
#MYLINE#     123 bar baz foo
#MYLINE#     123 foo baz bar
#SHIELD#     123 foo baz bar foo boo
#SHIELD#     123 foo bar bar
#MYLINE#     123 boo baz foo asdf
Some other text
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...