簡體   English   中英

正則表達式多行奇怪的行為

[英]Regex multiline strange behaviour

我有一個像這樣的字符串:

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第三列(0/0/3 / 0.0)和最后一列(IDE Primary Channel)中的文本時:

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

第一組正常:“ 0/0/3 / 0.0”

但是第二組是下一行!:“ target 0 0/0/3 / 0.0.0 tgt CLAIMED DEVICE”

多行(僅一行)如何實現?如何獲得最后一列(2個或更多空格之后的字符串末尾的文本)?

簡短的答案是因為正則表達式中的第一個.*匹配到第一行的末尾,然后\\s{2,}匹配換行符,然后(?<BusName>.*?)將匹配所有第二行。

Multiline模式意味着^$匹配行的開頭和結尾,而不僅僅是整個字符串的開頭和結尾。

刪除.* ,然后<BusName>將是<BusName> 0/0/3/0.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]);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM