对正则表达式几乎没有帮助
本文关键字:有帮助 正则表达式 | 更新日期: 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);