我有以下字符串:
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”之后的那些。
感谢。
答案 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
之间匹配(反之亦然)。