使用正则表达式时不要解析字符串

时间:2014-01-30 01:03:10

标签: c# regex

假设我有这个(在一个字符串中):

5: <null>,
6: <null>,
7: 5

我想删除包含<null>的行。我目前的表达是这样的:

@"[\d-]" + ": <null>,"

我很确定它不起作用的原因是因为正则表达式正在解析第二部分而我不想要它。有什么帮助吗?

3 个答案:

答案 0 :(得分:3)

是的,我是那些没有使用Regex的人之一...所以这里是一个非正则版本:

var result = input.Split('\n').Where(x => !x.Contains("<null>")).ToArray();

然后可能使用Join来创建一个字符串:

var originalWithoutNulls = string.Join("\n", result);

答案 1 :(得分:2)

也许简单Where + Contains / IndexOf而不是RegEx:

string[] lines =...
var filteredLines = lines.Where(line => line.IndexOf("<null>") == -1).ToArray()

答案 2 :(得分:1)

如果数据是由数字构成的(如果不是我可以重做),请将其用作匹配的模式。在这里,我使用命名捕获来获取键值对并将它们放入字典中。

var data = @"5: <null>,
6: <null>,
7: 5";

var dictResult = 
Regex.Matches(data, @"^(?<Key>\d+):\s(?<Value>\d+)", RegexOptions.Multiline)
     .OfType<Match>()
     .ToDictionary (mt => mt.Groups["Key"].Value, mt => mt.Groups["Value"].Value);

     Console.WriteLine (dictResult["7"]); // Prints 5
     Console.WriteLine (dictResult.ContainsKey("5")); // False