2

Я должен обрезать все логины из файла 17k. Как удалить весь текст, кроме того, что находится между двумя строками?

НАПРИМЕР:

<USER_LOGIN_ID>user1</USER_LOGIN_ID>

<USER_LOGIN_ID>user2</USER_LOGIN_ID>

<USER_LOGIN_ID>user3</USER_LOGIN_ID>

<USER_LOGIN_ID>user4</USER_LOGIN_ID>

покинул бы

user1

user2

user3

user4

2 ответа2

1

Это немного сложное регулярное выражение:

Найти: <USER_LOGIN_ID>([^<]*)</USER_LOGIN_ID> Заменить: $1

Здесь вы соответствуете <USER_LOGIN_ID> , за которым следует любое количество символов, которые не являются < , а затем </USER_LOGIN_ID> . Скобки () помечают центральный текст как поле, а $1 в строке замены распространяется только на это совпадающее поле.

Для показанного вами экземпляра, содержащего только одно совпадение на строку, вы можете использовать немного более простую строку поиска <USER_LOGIN_ID>(.*)</USER_LOGIN_ID> , но это не удастся, если в каждой строке будет два входа.

Если в одной строке несколько входов в систему, первый поиск объединит строки, если в исходном тексте не будет пунктуации (если нет, вам придется добавить ее в строку замены, например, $1 - с пробелом),

Вам, конечно, нужно будет отметить регулярное выражение (и, возможно, совпадение с регистром) в опциях.

0

Ищи:

<USER_LOGIN_ID>(.*?)</USER_LOGIN_ID>

Заменить:

\1

.*? представляет максимально короткий текст, который попадает между двумя указанными тегами. (Знак вопроса делает сопоставление не жадным.)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .