使用正则表达式从字符串“S9.98 Sep”中删除“S9.98”中的S但不从“Sep”中删除S.

时间:2016-09-09 17:39:33

标签: regex c#-4.0

从以下字符串“test S9.98 Sep”中,我想删除数字前面的S.但不是使用RegEx的“test”或“Sep”。

我试过这个

string result = Regex.Replace("test S9.98 Sep", "S(?!^Sep$)", "", RegexOptions.IgnoreCase);

string result = Regex.Replace("test S9.98 Sep", "[S]", "", RegexOptions.IgnoreCase);

但我得到“tet 9.98 ep”

3 个答案:

答案 0 :(得分:2)

您可以使用这样的前瞻性正则表达式:

string result = Regex.Replace("test S9.98 Sep", @"S(?=\d+(?:\.\d+)?)", "", RegexOptions.IgnoreCase);

S(?=\d+(?:\.\d+)?)是正向前瞻,只有在紧跟一个整数或十进制数后才会匹配字母S

参考: Lookahead and Lookbehind Zero-Length Assertions

答案 1 :(得分:2)

你的前瞻非常接近。唯一的问题是您的前瞻再次寻找Sep,而S已经匹配:

string result = Regex.Replace("test S9.98 Sep", "\\bS(?!ep(\\b|$))", "", RegexOptions.IgnoreCase);

Demo

答案 2 :(得分:2)

S之后使用正面向前看并在它之前使用单词边界。

string result = Regex.Replace("test S9.98 Sep", @"\bS(?=\d)", "", RegexOptions.IgnoreCase);

(?=\d)正向前瞻将允许在数字前匹配S(不包括匹配中的数字)。单词边界将需要S出现在非单词char(或字符串的开头)之后。