我有一个C#应用程序中的字符串,想知道正确的方法是什么,以检查最后两个字符是否为,
(逗号和空格),如果是,则使用正则表达式将它们删除。
一个没有使用正则表达式的可行方案:
string str = "dfsf, ";
if (str.EndsWith(", "))
str = str.Remove(str.Length - 2);
我们移除了2,因为2是", "
的长度。
你不需要使用正则表达式,可以使用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);
不要删除尾随的逗号和空格,最好的方法是在一开始生成字符串时就不加额外的逗号。在生成逗号分隔值时,只需使用String.Join
将所有字符串与特定分隔符连接在一起:
var line = string.Join(", ", yourCollectionOfValues);
使用Join
函数会比将值逐个附加在一起更加简单快捷,而且Join
函数已经处理好了确保没有尾随分隔符的问题。
是的,这不是你必须或应该使用正则表达式的东西;但既然你问了如何用正则表达式做到这一点(例如,可能你只是好奇,“假设我必须使用正则表达式”是学习的好方法),考虑以下模式:
(.*?)(, )?$
您可以在相关正则表达式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, ", ", $", "");
),因为它非常简单;但希望您能发现我概述的方法具有指导意义。
regex
解决问题并提供详细的说明。尽管我稍微修改了一下以减少代码行数,但基本上还是采用了 @UlugbekUmirov 的解决方案,因此我将您标记为答案。 - scapegoat17Regex.Match(r,"(.*?)(, )?$)").ToString();
会产生一个带有消息“parsing "(.*?)(, )?$)" - Too many )'s”的ArgumentException
异常。我认为您可能正在寻找的是Regex.Match(r,"(.*?)(, )?$").Groups[1].Value
。 - J0e3gan
string output = Regex.Replace("my string, ", ", $", "");
。 - Ulugbek Umirov