我在C#应用程序中有一个字符串,并且想知道检查最后两个字符是,
(逗号和空格)的正确方法是什么,如果是这样,请使用正则表达式删除它们。
答案 0 :(得分:11)
没有正则表达式的工作解决方案:
string str = "dfsf, ";
if (str.EndsWith(", "))
str = str.Remove(str.Length - 2);
我们删除2,因为2是", "
的长度。
答案 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, ", ", $", "");
)中建议的更好,因为它非常简单;但希望你发现我概述的方法很有启发性。