0

私は検索を使い果たしました。支援が必要です。私は正規表現が初めてで、複数行の文字列から単語を引き出すことができましたが、行全体ではありません。テキストを文字列に取り込んでいますが、次の行を取得する方法がわかりません。

文字列の例には複数の行があります (文字列 multipleLines):

 Authentication information
 User information:
 domai n\username
 Paris

「User iformation」行の後に「domain\username」というテキストを取得する必要があります。

正規表現の多くの組み合わせを試しましたが、機能しません。例:

 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 に答える