正则表达式排除模式

本文关键字:模式 排除 正则表达式 | 更新日期: 2023-09-27 18:14:36

我正在尝试使用regex从字符串中排除一些数据。

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

这个想法是过滤掉以"24 47"开头和以"0d0a"结尾的数据

源字符串:

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 

正则表达式排除模式

您的正则表达式要求整个字符串以"24 47"开始,以" 0d0a "结束。您需要多行选项,使^$匹配每行的开始/结束:

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>");

^匹配字符串的开头,$匹配字符串的结尾。如果你正在考虑你的"24 47"answers"0d0a"在你的字符串的中间,然后考虑删除^$

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

TRY THIS, JUST testing:

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

是否需要替换Match ?

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

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

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

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