0

次のような文字列があります。

string text = "ext_bus      0  0/0/3/0.0      side         CLAIMED     INTERFACE    IDE Primary Channel\r\ntarget       0  0/0/3/0.0.0    tgt          CLAIMED     DEVICE       \r\ndisk         0  0/0/3/0.0.0.0  sdisk";

ext_bus の 3 番目の列 (0/0/3/0.0) と最後の列 (IDE プライマリ チャネル) のテキストを取得するために正規表現の複数行検索を行うと、次のようになります。

Regex regExp = new Regex(@"^ext_bus\s*[0-9]+\s*(?<HWPath>\S+).*\s{2,}(?<BusName>.*?)\r?$", RegexOptions.Multiline);

最初のグループはOKです: "0/0/3/0.0"

しかし、2 番目のグループは次の行です!: "target 0 0/0/3/0.0.0 tgt CLAIMED DEVICE "

Multiline (1 行のみ) でこれをどのように行うことができますか。また、最後の列 (2 つ以上の空白の後の文字列の末尾にあるテキスト) を取得するにはどうすればよいですか。

4

2 に答える 2

0

簡単な答えは.*、正規表現の最初が最初の行の終わりまで一致し、次に\s{2,}改行文字(?<BusName>.*?)が一致し、次に が 2 行目のすべてに一致するためです。

Multilineモードは、文字列全体の開始と終了だけでなく、行の開始と終了に一致すること^を意味します。$

を削除する .*と、<BusName>次の空白の後の行の残りのテキストになります0/0/3/0.0

于 2013-04-02T13:34:09.217 に答える
0

なぜ正規表現を使用するのですか?

スプリットで簡単にできます

string value = "ext_bus      0  0/0/3/0.0      side         CLAIMED     INTERFACE    IDE Primary Channel\r\ntarget       0  0/0/3/0.0.0    tgt          CLAIMED     DEVICE       \r\ndisk         0  0/0/3/0.0.0.0  sdisk";
char[] delimiters = new char[] {' ' }; // here you can add more seperaors
string[] parts = value.Split(delimiters, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < parts.Length; i++)
{
    Console.WriteLine(parts[i]);
}
于 2013-04-02T13:35:50.107 に答える