2014-11-06 60 views
1

我正在尋找C#.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 

我想獲得該打印機的名稱(隆德-M1,MAR-M1,MAR-M2)一個數組的foreach英寸

我真的很感謝這方面的幫助,我的想法不適用於正則表達式。

預先感謝您!

回答

1

你可以做一些很簡單的,就像搜索的Print2前綴:

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

這給出了http://www.regexer.com下面的輸出。然後,您需要訪問每個Match對象的第一個組,以抓取您之後的字符串部分。

enter image description here

編輯

如果你想封裝不同的打印號碼使用,允許2與任何其他數字交換以下。

\\\\%Print[0-9]%\\(.*) 
+0

神奇的任何路徑的最後一段!非常感謝!我忘了說,在同一個腳本中,可能會出現類似@%connect2%\\%Print1%\ SAR-P2的情況,%Print1%是差異。我應該爲此做一個表達還是有辦法在同一個搜索中實現它? – Andreas 2014-11-06 13:02:41

+1

@Andreas:我在最後添加了一些額外的內容,以顯示如何將該號碼交換爲任何其他號碼。 – Ian 2014-11-06 13:06:36

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

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]; 
    } 
}