正则表达式删除特定字符串(如果存在)

时间:2014-11-06 01:57:15

标签: c# regex string

我想删除字符串末尾的-L 如果存在

所以

ABCD   => ABCD
ABCD-L => ABCD

目前我正在使用类似下面一行的内容,我在我的正则表达式中使用if/else类型的排列,但是,我觉得它应该比这更容易。

var match = Regex.Match("...", @"(?(\S+-L$)\S+(?=-L)|\S+)");

4 个答案:

答案 0 :(得分:4)

如何做:

Regex rgx = new Regex("-L$");
string result = rgx.Replace("ABCD-L", "");

基本上如此:如果字符串以-L结尾,则用空字符串替换该部分。

如果您不仅要在字符串的末尾调用替换,而且还要在单词的末尾调用替换,则除了结尾之外,还可以添加一个额外的开关来检测字边界(\b)字符串:

Regex rgx = new Regex("-L(\b|$)");
string result = rgx.Replace("ABCD-L ABCD ABCD-L", "");

请注意,检测字边界可能有点模棱两可。有关在C#中被视为单词字符的字符列表,请参阅here

答案 1 :(得分:2)

您还可以使用String.Replace()方法在字符串中查找特定字符串,并将其替换为另一个字符串,在这种情况下使用空字符串。

http://msdn.microsoft.com/en-us/library/fk49wtc1(v=vs.110).aspx

答案 2 :(得分:1)

使用Regex.Replace功能,

Regex.Replace(string, @"(\S+?)-L(?=\s|$)", "$1")

DEMO

<强>解释

(                        group and capture to \1:
  \S+?                     non-whitespace (all but \n, \r, \t, \f,
                           and " ") (1 or more times)
)                        end of \1
-L                       '-L'
(?=                      look ahead to see if there is:
  \s                       whitespace (\n, \r, \t, \f, and " ")
 |                        OR
  $                        before an optional \n, and the end of
                           the string
)                        end of look-ahead

答案 3 :(得分:1)

你当然可以使用正则表达式,但为什么使用普通的字符串函数更清楚?

比较一下:

text = text.EndsWith("-L")
    ? text.Substring(0, text.Length - "-L".Length)
    : text;

到此:

text = Regex.Replace(text, @"(\S+?)-L(?=\s|$)", "$1");

或者更好的是,定义一个像这样的扩展方法:

public static string RemoveIfEndsWith(this string text, string suffix)
{
    return text.EndsWith(suffix)
        ? text.Substring(0, text.Length - suffix.Length)
        : text;
}

然后你的代码看起来像这样:

text = text.RemoveIfEndsWith("-L");

当然,您始终可以使用Regex定义扩展方法。至少那时你的调用代码看起来更清晰,更易读和可维护。