作者:robinqianqcs521 | 来源:互联网 | 2023-09-15 17:39
这就是字符串中的数据:
TGPU167THDD134FCPU1430
(还有更多,这只是原始输出的一小部分.)
我想做的是通过一些快速代码(不是实际代码有多长,但执行需要多长时间)来提供它将删除所有
TGPU1
并将其输出到一个新字符串,其中只包含所有和 value>之间的值.我正在寻找字符串中的输出,如:67341430.
我发现这个代码:
bool FoundMatch = false;
try {
Regex regex = new Regex(@"<([be])pt[^>]+>.+?\1pt>");
while(regex.IsMatch(yourstring) ) {
yourstring = regex.Replace(yourstring, "");
}
} catch (ArgumentException ex) {
// Syntax error in the regular expression
}
但它只删除<* pt>哪个冷改变去除别的东西.但它一次只能删除一个标签.如果我必须删除所有标签,速度不是很快.
谢谢
PS如果你想知道,下面的代码是我想要添加的代码.这也是打印上面提到的原始字符串的代码:
static void Main(string[] args)
{
Console.WriteLine("Memory mapped file reader started");
using (var file = MemoryMappedFile.OpenExisting("sensor"))
{
using (var reader = file.CreateViewAccessor(0, 3800))
{
var encoding = Encoding.ASCII;
Console.WriteLine(encoding.GetString(bytes));
}
}
Console.WriteLine("Press any key to exit ...");
Console.ReadLine();
}
解决方法:
您可以使用LINQ:
String.Concat(
XElement.Parse(...)
.Descendants("value")
.Select(v => v.Value)
);
如果您真的关心性能,可以直接使用XmlReader来读取标记并附加到StringBuilder.
但是,这不值得,除非您的XML大到数百兆字节.