正则表达式排除模式

时间:2011-11-14 10:58:38

标签: c# regex

我正在尝试使用正则表达式从字符串中排除某些数据。

var match = Regex.Match(text, @"^(24 47(.*?)0D 0A)$");

我们的想法是过滤掉以“24 47”开头并以“0D 0A”结尾的数据

源字符串:

A0 A1 00 02 83 00 83 0D 0A 
A0 A1 00 02 84 1B 9F 0D 0A 
24 47 50 47 47 41 2C 31 32 31 39 30 37 2E 30 30 30 2C 32 34 30 30 2E 30 30 30 30 2C 4E 2C 31 32 31 30 30 2E 30 30 30 30 2C 45 2C 30 2C 30 30 2C 30 2E 30 2C 30 2E 30 2C 4D 2C 30 2E 30 2C 4D 2C 2C 30 30 30 30 2A 36 35 0D 0A 
24 47 50 47 53 41 2C 41 2C 31 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 2C 30 2E 30 2C 30 2E 30 2C 30 2E 30 2A 33 30 0D 0A 
24 47 50 52 4D 43 2C 31 32 31 39 30 37 2E 30 30 30 2C 56 2C 32 34 30 30 2E 30 30 30 30 2C 4E 2C 31 32 31 30 30 2E 30 30 30 30 2C 45 2C 30 30 30 2E 30 2C 30 30 30 2E 30 2C 32 38 30 36 30 36 2C 2C 2C 4E 2A 37 34 0D 0A 
24 47 50 56 54 47 2C 30 30 30 2E 30 2C 54 2C 2C 4D 2C 30 30 30 2E 30 2C 4E 2C 30 30 30 2E 30 2C 4B 2C 4E 2A 30 32 0D 0A

但我只想要这个:

A0 A1 00 02 83 00 83 0D 0A 
A0 A1 00 02 84 1B 9F 0D 0A 

5 个答案:

答案 0 :(得分:3)

你的正则表达式要求整个字符串以“24 47”开头并以“0D 0A”结束。您需要多行选项,使^$匹配每行的开头/结尾:

尝试

var match = Regex.Match(text, @"^24 47(.*)0D 0A$", RegexOptions.Multiline);

如果您想排除这些行,请使用否定前瞻:

var match = Regex.Match(text, @"^(?!24 47(.*)0D 0A$).*$", RegexOptions.Multiline);

如果您想要在没有换行符的长连续字符串中查找和删除任何地方 的分隔子串,请尝试以下操作:

resultString = Regex.Replace(subjectString, @"\b24 47(.*?)0D 0A\b", "<removed>");

答案 1 :(得分:2)

^匹配字符串的开头,$匹配结尾。如果您考虑将“24 47”和“0D 0A”放在字符串的中间,请考虑删除^$

var textFiltered = Regex.Replace(originalText, @"(24 47(.*?)\r\n)", "");

<强>更新

尝试这个,只是测试:

string replace = Regex.Replace(input, @"(24 47(.*?)0D 0A *(\r\n)*)", "", RegexOptions.Multiline);

答案 2 :(得分:1)

您需要Replace而不是Match吗?

text = Regex.Replace(text, @"^(24 47(.*?)0D 0A)$", "");

答案 3 :(得分:0)

为了匹配特殊字符(CR和LF),您必须将选项设置为Singleline。你必须用空字符串替换

 text = Regex.Replace(text, @"^(24 47(.*?)\r\n)$", "", RegexOptions.Singleline );

请参阅here

答案 4 :(得分:0)

您可以遍历字符串列表,尝试匹配正则表达式^24 47.*0D 0A $,并选择那些匹配成功的字符串。请注意$之前的额外空格。您给出的示例字符串以空格结尾。