我正在寻找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
我想得到阵列中打印机的名称(Lund-M1,MAR-M1,MAR-M2)来预告。
我真的很感激任何帮助,我的想法不适用于Regex。
提前谢谢!
答案 0 :(得分:1)
你可以做一些非常简单的事情,比如搜索Print2前缀:
\\\\%Print2%\\(.*)
这在http://www.regexer.com上给出了以下输出。然后,您需要访问每个Match
对象的第一组,以获取您所追求的字符串部分。
修改强>
如果要封装不同的打印数字,请使用以下内容,以便将2与其他任何数字交换。
\\\\%Print[0-9]%\\(.*)
答案 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
答案 2 :(得分: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];
}
}