从以下字符串“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”
答案 0 :(得分:2)
您可以使用这样的前瞻性正则表达式:
string result = Regex.Replace("test S9.98 Sep", @"S(?=\d+(?:\.\d+)?)", "", RegexOptions.IgnoreCase);
S(?=\d+(?:\.\d+)?)
是正向前瞻,只有在紧跟一个整数或十进制数后才会匹配字母S
。
答案 1 :(得分:2)
你的前瞻非常接近。唯一的问题是您的前瞻再次寻找Sep
,而S
已经匹配:
string result = Regex.Replace("test S9.98 Sep", "\\bS(?!ep(\\b|$))", "", RegexOptions.IgnoreCase);
答案 2 :(得分:2)
在S
之后使用正面向前看并在它之前使用单词边界。
string result = Regex.Replace("test S9.98 Sep", @"\bS(?=\d)", "", RegexOptions.IgnoreCase);
(?=\d)
正向前瞻将允许在数字前匹配S
(不包括匹配中的数字)。单词边界将需要S
出现在非单词char(或字符串的开头)之后。