如何使用正则表达式从字符串(如果有)中删除最后一个逗号和空格?

时间:2015-01-08 17:01:16

标签: c# regex

我在C#应用程序中有一个字符串,并且想知道检查最后两个字符是,(逗号和空格)的正确方法是什么,如果是这样,请使用正则表达式删除它们。

4 个答案:

答案 0 :(得分:11)

没有正则表达式的工作解决方案:

string str = "dfsf, ";

if (str.EndsWith(", "))
    str = str.Remove(str.Length - 2);

我们删除2,因为2是", "的长度。

demo

答案 1 :(得分:8)

您不需要正则表达式,请使用String.TrimEnd,如:

string updatedString = yourString.TrimEnd(',', ' ');

您还可以指定字符串并调用ToCharArray,如:

string str = "something,  ,   ,,,,   ";
string updatedString = str.TrimEnd(", ".ToCharArray());

会给你"something"

如果您只想删除单次出现 ", " (逗号和空格末尾),请使用:

if (str.EndsWith(", "))
    updatedString = str.Substring(0, str.Length - 2);

答案 2 :(得分:2)

不是删除尾随的逗号和空格,而是首先简单地生成字符串而不需要额外的逗号。生成逗号分隔值时,只需使用String.Join将所有字​​符串与特定分隔符连接在一起:

var line = string.Join(", ", yourCollectionOfValues);

比将值附加在一起更容易,更快,Join已经处理,确保没有尾随分隔符。

答案 3 :(得分:0)

(抱歉,我迟到了。)

,这是你必须或应该使用正则表达式的东西; 但是因为你问如何使用正则表达式(例如,也许你只是好奇,并且“假设我必须使用正则表达式”假设是一种很好的学习方法),请考虑以下内容图案:

(.*?)(, )?$

您可以在related regex fiddle

中对其进行测试

关键点:

  • (.*?) - 尽可能少地匹配除换行符(*之外的任何字符的零或多(.? )。
  • (, )?$ - 最后匹配零或一(?, $)。

此外,以下带有此模式的C#示例......

var str1 = "whatever, ";
var str2 = "whatever, ,";
var str3 = "";

var regex = new Regex("(.*?)(, )?$");
var str1Match = regex.Match(str1);
var str2Match = regex.Match(str2);
var str3Match = regex.Match(str3);

Console.WriteLine(str1Match.Groups[1].Value);
Console.WriteLine(str2Match.Groups[1].Value);
Console.WriteLine(str3Match.Groups[1].Value);

...产生以下输出:

  • str1"whatever, " => whatever
  • str2"whatever, ," => whatever, ,
  • str3"" =>

它使用Groups[1].Value获取第一个捕获组的值(即(.*?)匹配的值,而不是(, )?(如果有))。

修改

我实际上喜欢@UlugbekUmirov在他的评论(string output = Regex.Replace("my string, ", ", $", "");)中建议的更好,因为它非常简单;但希望你发现我概述的方法很有启发性。