使用正则表达式从文本框中获取特定文本

时间:2014-11-06 12:51:56

标签: c# .net regex

我正在寻找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。

提前谢谢!

3 个答案:

答案 0 :(得分:1)

你可以做一些非常简单的事情,比如搜索Print2前缀:

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

这在http://www.regexer.com上给出了以下输出。然后,您需要访问每个Match对象的第一组,以获取您所追求的字符串部分。

enter image description here

修改

如果要封装不同的打印数字,请使用以下内容,以便将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];
    }
}