我想删除字符串末尾的-L
如果存在
所以
ABCD => ABCD
ABCD-L => ABCD
目前我正在使用类似下面一行的内容,我在我的正则表达式中使用if/else
类型的排列,但是,我觉得它应该比这更容易。
var match = Regex.Match("...", @"(?(\S+-L$)\S+(?=-L)|\S+)");
答案 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")
<强>解释强>
( 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定义扩展方法。至少那时你的调用代码看起来更清晰,更易读和可维护。