C#
一种面向对象的类型安全的编程语言,它起源于 C 语言系列,包括对面向组件的编程的支持。
145 个问题
我正在创建一个分析程序,可以非常快速地显示数据。这些数据中有很多只是噪声,因此我想做一个过滤函数。
使用 SerialPort.ReadExisting() 读取和显示数据;因此以“Clumps”形式返回。这意味着仅搜索 ID 并删除所有字符串是行不通的。
数据通过串行端口发送并显示为串行端口。
ID: 201, Data: 0 0 40 0 0 0 0 80
ID: 201, Data: 0 0 40 0 0 0 0 80
ID: 20F, Data: FF FF 27 10 40 0 FF 77
ID: 190, Data: 0 53 0 0 3C 1 0 3C
ID: 20F, Data: FF FF 27 10 40 0 FF 7D
ID: 280, Data: 0 9
ID: 201, Data: 0 0 40 0 0 0 0 80
ID: 231, Data: 1 6F 64 0 0 0 80
ID: 205, Data: 2 95 1 F5 3 F4 1 F5
ID: 201, Data: 0 0 40 0 0 0 0 80
ID: 4B0, Data: 27 10 27 10 27 10 27 10
ID: 20F, Data: FF FF 27 10 40 0 FF 98
ID: 20F, Data: FF FF 27 10 40 0 FF 9B
ID: 190, Data: 0 54 0 0 3C 1 0 3C
ID: 4B0, Data: 27 10 27 10 27 10 27 10
ID: 280, Data: 0 9
ID: 20F, Data: FF FF 27 10 40 0 FF AA
ID: 433, Data: 80 4 50 1 0 A0 0 0
ID: 20F, Data: FF FF 27 10 40 0 FF AF
ID: 280, Data: 0 9
数据是从 arduino 读取的。
我希望能够提交一个 ID 和要删除的整行。
我试过使用; 没有任何结果。
public string filterIDs(string dataIn) {
foreach (var filterID in filteredIDs) dataIn = Regex.Replace(dataIn, @$"^ID: {Regex.Escape(filterID)},.*\n", "", RegexOptions.Multiline);
return dataIn;
}
and
foreach (var filterID in filteredIDs)
{
dataIn = Regex.Replace(dataIn,filterID, "", RegexOptions.Multiline);
}
return dataIn;
它只删除了身份证号码。
我使用过其他正则表达式值,但它们也不起作用,但这可能只是因为我缺乏该主题的经验。
filteredIDs 值保留为“ID: NUM”。
我是使用正则表达式的新手,所以任何帮助都会有用。
Note:此问题总结整理于: How can I remove a line from a string that includes a certain value C#?
你有没有考虑过另一种不使用正则表达式的方法?它可能更简单。
请参考以下代码,使用 linq 删除包含特定值的行。
static void Main(string[] args)
{
var result = filterIDs("201");
}
public static string filterIDs(string dataIn)
{
var filteredIDs = File.ReadAllLines("1.txt");
var notincluded = filteredIDs.Where(x => !x.Contains(dataIn));
string result=string.Join("\r", notincluded.ToArray());
return result;
}
注意:在这里我使用txt文件作为数据源,您可以根据自己的情况进行一些更改。
测试结果:
希望这对你有所帮助。 如果回复有帮助,请单击“接受答案”并投赞成票。
注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。