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

1

Я ищу регулярное выражение в С#.net для извлечения принтеров из списка в скрипте.

Это пример:

@set nr=2
@if not exist "%userprofile%\Version%nr%.txt" goto reload
@goto koppla
:reload
@echo skrivare>"%userprofile%\Version%nr%.txt"
@del "%userprofile%\zxy-*.txt"
@call skrivare.cmd
@exit
:koppla
@%connect1% \\%Print2%\Lund-M1
@%connect2% \\%Print2%\MAR-M1
@%connect2% \\%Print2%\MAR-M2

Я хотел бы получить имена (Lund-M1, MAR-M1, MAR-M2) принтеров в массиве для foreach.

Я очень ценю любую помощь в этом, мой разум не работает с Regex.

Заранее спасибо!

Теги:

3 ответа

1
Лучший ответ

Вы можете сделать что-то довольно простое, например, поиск префикса Print2:

\\\\%Print2%\\(.*)

Это дает следующий результат на http://www.regexer.com. Затем вам нужно получить доступ к первой группе каждого объекта Match чтобы захватить часть строки, после которой вы находитесь.

Изображение 174551

редактировать

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

\\\\%Print[0-9]%\\(.*)
  • 0
    Фантастика! Спасибо вам большое! Я забыл сказать, что в том же сценарии может быть как @% connect2% \\% Print1% \ SAR-P2,% Print1% - это разница. Должен ли я сделать другое выражение для этого или есть способ реализовать его в том же поиске?
  • 1
    @Andreas: я добавил дополнительный бит в конце, чтобы показать, как вы можете обменять номер на любой другой номер.
1
foreach (Match match in Regex.Matches(text, 
    @"^@%connect\d+%\s+\\\\%Print2%\\(.*?)\s*$", RegexOptions.IgnoreCase | RegexOptions.Multiline))
{
    if (match.Success)
    {
        var name = match.Groups[1];
    }
}
1
(?m:(?<=^@\%connect\d\% \\\\(.*?\\)*)[^\\]+$)

даст три матча по вашему сценарию, со значениями

Lund-M1
MAR-M1
MAR-M2

Так

Regex.Matches(input, @"(?m:(?<=^@\%connect\d\% \\\\(.*?\\)*)[^\\]+$)")
     .Cast<Match>()
     .Select(m => m.Value)
     .ToArray()

дает вам то, что вам нужно.

Это проверяет начало строки @%connect затем любую цифру, за которой следует % затем тянет последний сегмент любого пути формы \\something\something\something\AnyNonBackslashChars

Ещё вопросы

Сообщество Overcoder
Наверх
Меню