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 第三列(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”

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

Multiline(只有一行)如何实现这一点,以及如何获得最后一列(字符串末尾的文本在 2 个或更多空格之后)。

4

2 回答 2

0

简短的回答是,这是因为.*正则表达式中的第一个匹配到第一行的末尾,然后\s{2,}匹配换行符,然后(?<BusName>.*?)将匹配第二行的所有内容。

Multilinemode 意味着^$匹配一行的开始和结束,而不仅仅是整个字符串的开始和结束。

删除 .*然后<BusName>将剩下的文本放在后面的空格后面的行上0/0/3/0.0

于 2013-04-02T13:34:09.217 回答
0

你为什么使用正则表达式?

您可以使用 split 轻松完成

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 回答