[英]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.