C#Regex匹配所有出现的模式并替换为空字符串

时间:2016-11-29 20:51:12

标签: c# regex

我正在尝试匹配模式<two alpha chars>single space<two digits>single space<two digits>并删除字符串中的所有匹配项。

var myRegex = @"(?:^|[\s]|[, ]|[.]|[\n]|[\t])([A-Za-z]{2}\s[0-9]{2}\s[0-9]{2})($|[,]|[.]|[\s]|[\n]|[\t])";

string myString = "this 02 34, HU 23 76 , hh 76 745 1.HO 12 33. HO 34 56";
            var matches = Regex.Matches(myString, myRegex);

            foreach (Match match in matches)
            {
                myString = myString.Replace(match.Value, "");
            }

在上面的变量myString&#34;这0234&#34;不会匹配,因为没有space or period or comma or new line or tab。这是预期的行为。

但是&#34; HO 34 56 &#34;不匹配,因为它不以space or period or comma or new line or tab结尾。我怎样才能在比赛中包含此内容,而不是匹配&#34; hh 76 745 &#34;

执行上面的代码后,我希望myString变量有&#34; 这个02 34,...... 76 745 1 .. &#34;

1 个答案:

答案 0 :(得分:1)

将此正则表达式用于字边界

\b[A-Za-z]{2}\s[0-9]{2}\s[0-9]{2}\b

请参阅regex demo

<强>详情:

  • \b - 领先的单词边界
  • [A-Za-z]{2} - 2 alpha
  • \s - 空白
  • [0-9]{2} - 2位数
  • \s - 空白
  • [0-9]{2} - 2位数
  • \b - 一个尾随字边界。

如果您需要说“不在alpha之前”,请将第一个\b替换为(?<![a-zA-Z]),如果您想说“未跟随数字”,请将最后\b替换为{ {1}}。也就是说,使用 lookarounds ,就像字边界一样,是零宽度断言。

如果你真的匹配了那个chunk ,当它具有以下空格或句点或逗号或新行或标签或字符串的开头或字符串结尾的前导或预告片时,请使用

(?!\d)

请参阅this demo