RegEx的帮助很小

时间:2012-06-01 15:16:38

标签: c# regex parsing

我必须解析一个非常复杂的字符串来“评估”字符串中包含的函数。我只有一个“提取”功能,它有这个特定的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...

(数字是坐标,该功能由本RegEx识别:

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 个答案:

答案 0 :(得分: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块实际定位,而不是被忽略。

答案 1 :(得分:0)

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

这将捕获几个团体。第一个子组将是LOC_POS之前的字符串。 Regexr here.

第1组:完整字符串

第2组:LOC_POS之前的字符串

第3组:LOC_POS呼叫

答案 2 :(得分: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,但你可以将其更改为任何内容)(使用带有空白捕获的正则表达式)。然后我在所述拆分序列上拆分字符串,确保处理空条目。热潮,完成。

答案 3 :(得分:-1)

var content = "....";
var regex = new Regex(@"LOC_POS\([ 0-9.,]+;[ 0-9.,]+\);");
var matches = regex.Match(content);