对正则表达式几乎没有帮助

本文关键字:有帮助 正则表达式 | 更新日期: 2023-09-27 18:35:58

我必须解析一个相当复杂的字符串来"评估"字符串中包含的函数。我只有一个函数要"提取",它具有以下特定的 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...

我知道如何使用正常的字符串解析来做到这一点。

对正则表达式几乎没有帮助

这就是我想出的。

        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的每个实例,拆分导致它将字符串分解为其段,然后使用字符串生成器重建字符串以将所有 newLines 放在正确的位置。 如果您确实需要,也可以使用它来捕获 LOC 块的各个实例。 围绕整个事情的捕获组是为了确保实际定位LOC块,而不是忽略。

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

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

第 1 组:完整字符串

第 2 组:LOC_POS之前的字符串

第 3 组:LOC_POS呼叫

这个怎么样:

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

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