我正在尝试使用正则表达式从字符串中排除某些数据。
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
答案 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 $
,并选择那些匹配不成功的字符串。请注意$
之前的额外空格。您给出的示例字符串以空格结尾。