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