2

我必须解析一个非常复杂的字符串来“评估”字符串中包含的函数。我只有一个“提取”功能,它有这个特定的sintax:

LOC_POS(number;number);

该字符串包含在这样的 HTML 页面中:

something here LOC_POS(45;9);Some string or html content <br> here LOC_POS(45.21312;9.1232123);LOC_POS(45,32;9,12); some other string...

(数字是坐标,这个正则表达式可以识别函数:

LOC_POS\([ 0-9.,]+;[ 0-9.,]+\);

如何提取c#中的所有块?我想要的结果是一个包含(每个项目一行)的数组

something here 
LOC_POS(45;9);
Some string or html content <br> here 
LOC_POS(45.21312;9.1232123);
LOC_POS(45,32;9,12); 
some other string...

我知道如何用普通的字符串解析来做到这一点..

4

4 回答 4

1

这是我想出的。

        string str = @"something here LOC_POS(45;9);Some string or html content <br> here LOC_POS(45.21312;9.1232123);LOC_POS(45,32;9,12);  some other string...";
        Regex test = new Regex(@"(LOC_POS\([\d\.,]+;[\d\.,]+\);)");
        string[] segments = test.Split(str);
        StringBuilder sb = new StringBuilder();
        foreach (string s in segments)
            if(!String.IsNullOrEmpty(s))
                sb.AppendLine(s);
        textBox1.Text = sb.ToString();

输出结果

something here 
LOC_POS(45;9);
Some string or html content <br> here 
LOC_POS(45.21312;9.1232123);
LOC_POS(45,32;9,12);
 some other string...

正则表达式找到 LOC_POS 的每个实例,拆分导致它将字符串分解为其段,然后您使用 stringbuilder 重建字符串以在正确的位置获取所有 newLines。如果您确实需要它们,您还可以使用它来捕获 LOC 块的各个实例。整个事件的捕获组是确保 LOC 块实际被定位,而不是被忽略。

于 2012-06-01T18:48:53.477 回答
0

这个怎么样:

string str = @"something here LOC_POS(45;9);Some string or html content <br> here LOC_POS(45.21312;9.1232123);LOC_POS(45,32;9,12);  some other string...";
string rgx = @"\s*(LOC_POS\([ 0-9.,]+;[ 0-9.,]+\);)\s*";

str = Regex.Replace(str, rgx, @"##$1##");
//Console.WriteLine("str= " + str);

string[] lines = str.Split(new string[] {"##"}, StringSplitOptions.RemoveEmptyEntries);

foreach(string s in lines) {
    Console.WriteLine(s);
}
Console.ReadKey();

首先,我在元素周围放置了一个任意拆分序列(我使用了##,但您可以将其更改为任何内容)LOC_POS(使用带有空格捕获的正则表达式)。然后我在所述拆分序列上拆分字符串,确保处理空条目。砰,完成。

于 2012-06-01T15:52:36.447 回答
0

((.*?)(LOC_POS\([\d\.,]+;[\d\.,]+\);))

这将捕获几个组。第一个子组将是 LOC_POS 之前的字符串。正则表达式在这里。

第 1 组:全串

第 2 组:LOC_POS 之前的字符串

第 3 组:LOC_POS 调用

于 2012-06-01T15:20:53.707 回答
-1
var content = "....";
var regex = new Regex(@"LOC_POS\([ 0-9.,]+;[ 0-9.,]+\);");
var matches = regex.Match(content);
于 2012-06-01T15:20:50.343 回答