如何删除所有数字,但保留序数?

时间:2013-12-15 16:14:25

标签: c# .net regex

我有以下字符串:

Friday the 13th (1980)

现在我想从字符串中删除“1980”,而不是使用C#Regex删除“13”。所以看起来如下:

Friday the 13th ()

基本上我想删除字符串中的所有数字,除了后跟“st”,“nd”,“rd”,“th”的数字。例如,13日,1日,23日等。

我能够使用以下正则表达式删除所有数字:

Regex.Replace("Friday the 13th (1980)", @"\d+", string.Empty);

但是无法弄清楚我怎么能保持“st”,“nd”,“rd”或“th”之后的那些。

感谢。

2 个答案:

答案 0 :(得分:3)

您需要使用negative lookahead assertion,如下所示:

string result = Regex.Replace(input, @"\d+(?!\d|th|st|rd|nd)", "");

答案 1 :(得分:2)

对于你提到的具体事情,我会使用负面的预测和一些单词边界:

Regex.Replace("Friday the 13th (1980)",@"\b\d+\b(?!(?:st|[nr]d|th))",string.Empty);

但也许一个简单的单词边界可行,取决于你想要做的事情:

Regex.Replace("Friday the 13th (1980)",@"\b\d+\b",string.Empty);

(?! ... )是一个消极的前瞻,并确保匹配的部分不会被内部的内容所遵循。

\b是单词边界,仅在\w\W之间匹配(反之亦然)。