我必须解析一个非常复杂的字符串来“评估”字符串中包含的函数。我只有一个“提取”功能,它有这个特定的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...
我知道如何使用普通的字符串解析来实现它。
答案 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);