0

我已经用尽了我的搜索,需要帮助。我是正则表达式的新手,并且设法从多行字符串中提取单词,但不是整行。我将文本拉入字符串,但我无法找到下一行。

示例字符串有多行(字符串 multipleLines):

 Authentication information
 User information:
 domai n\username
 Paris

我需要在“用户信息”行之后获取文本“域\用户名”。

我尝试了许多正则表达式组合,但无法使其正常工作。例子:

 string topLine = "Authentication information";  
 label.Text = Regex.Match(multipleLines, topLine + "(.*)").Groups[1].Value;

我还尝试使用:topLine + "\n" 在获取身份验证信息行后,我应该添加什么来查看整个下一行?

4

2 回答 2

1

您可以在 Stack Overflow 上的此线程中找到您使用正则表达式的目标。您会想要实现,以便您可以使用and来匹配行的开始和结束。RegexOptions.Multiline^$

  • ^:取决于是否设置了 MultiLine 选项,匹配行中第一个字符之前的位置,还是字符串中的第一个字符。

  • $:取决于是否设置了 MultiLine 选项,匹配行中最后一个字符之后的位置,或字符串中的最后一个字符。

这些将是完成任务的最简单方法。


更新:

一个例子是这样的。

const string account = @"Authentication information:" + "\n"
     + "User Information: " + "\n"
     + "Domain Username: "
     + " \n" + "\\Paris";

MatchCollection match = Regex.Matches(account, ^\\.*$, RegexOptions.Multiline);

这将检索该行以及在该行上\\进行的所有操作。这是一个例子,希望能指出你正确的方向。

于 2013-03-27T22:28:34.527 回答
0

尽管 RegEx 可以完成您想要的,但这可能更简单且开销更少。使用此代码取决于您将收到的输入类型。对于您的示例,这将起作用:

string domainUsername = inputString.Split('\n').Where(z => z.ToLower().Contains(@"\")).FirstOrDefault();
if (domainUsername != null) {
    Console.WriteLine(domainUsername); // Should spit out the appropriate line.
} else {
    Console.WriteLine("Domain and username not found!"); // Line not found
}
于 2013-03-27T22:39:49.200 回答