正则表达式模式用于过滤掉任何不匹配的内容

时间:2013-06-14 13:57:58

标签: c# .net regex regex-negation

使用Regex.Replace(mystring, @"[^MV:0-9]", "")会移除任何不是MV:或0-9(\ d也可以使用)的信件,问题是我想删除任何不是MV:然后编号的内容。

我需要用任何东西替换任何不是这种模式的东西:

Starting String                        | Wanted Result
---------------------------------------------------------
sdhfuiosdhusdhMV:1234567890sdfahuosdho | MV:1234567890
MV:2138911230989hdsafh89ash32893h8u098 | MV:2138911230989
809308ej0efj0934jf0934jf4fj84j8904jf09 | Null
123MV:1234321234mnnnio234324234njiojh3 | MV:1234321234
mdfmsdfuiovvvajio123oij213432ofjoi32mm | Null

但我得到的是:

Starting String                        | Returned Result
---------------------------------------------------------
sdhfuiosdhusdhMV:1234567890sdfahuosdho | MV:1234567890
MV:2138911230989hdsafh89ash32893h8u098 | MV:213891123098989328938098
809308ej0efj0934jf0934jf4fj84j8904jf09 | 809308009340934484890409
123MV:1234321234mnnnio234324234njiojh3 | 123MV:12343212342343242343
mdfmsdfuiovvvajio123oij213432ofjoi32mm | mmvvv1232134232mm

即使有一个正则表达式模式,我会更好地使用以下内容:

if (Regex.IsMatch(strMyString, @"MV:"))
{
    string[] strarMyString = Regex.Split(strMyString, @"MV:");
    string[] strarNumbersAfterMV = Regex.Split(strarMyString[1], @"[^\d]");
    string WhatIWant = strarNumbersAfterMV[0]
}

如果我使用后期选项,那么就有了:

        string[] strarNumbersAfterMV = Regex.Split(strarMyString[1], @"[^\d]");

只在数字的第一次更改时进行一次拆分? (它始终以MV:后面的数字开头)

1 个答案:

答案 0 :(得分:4)

你不能这样做:

string matchedText = null;
var match = Regex.Match(myString, @"MV:[0-9]+");
if (match.Success)
{
    matchedText = Value;
}
Console.WriteLine((matchedText == null) ? "Not found" : matchedText);

这应该能满足你的需要。