我有一个包含逗号的列表,但我在同一个列表中也有其他逗号我不想删除,所以我想知道有没有办法只删除每行文本的最后一个逗号?
问问题
503 次
4 回答
1
最简单的方法是使用正则表达式,例如:
替换(/,\s*$/, '', [内容]);
这将在行尾 ($) 查找逗号字符 (,) 后跟任何空格 (\s*)。根据语言或程序,您必须单独传递每一行,或设置多行标志。
于 2012-12-11T00:55:33.540 回答
1
因为我们不知道您使用的是什么语言,所以我只能给您将捕获最后一个逗号的正则表达式:
,(?!.*,)
如果您将此正则表达式的匹配项替换为空白,您将删除最后一个逗号。
因此,正则表达式使用前瞻来断言匹配的逗号之后的任何地方都没有逗号。环顾四周的好处是不捕获,因此您不必用任何反向引用等替换。
于 2012-12-11T01:01:52.980 回答
1
如果您的意思是删除最后一个字符(如果它是逗号),那么您应该执行替换
^(.*),$
为$1
a,b,c,
将被替换为a,b,c
,并且a,b,c,d
不会匹配正则表达式。
如果您的意思是只删除最后一个逗号,即使它后面还有一些东西,也可以执行替换^(.*),([^,]*)$
为$1$2
a,b,c,
将被替换为a,b,c
,a,b,c,d
并将被替换为a,b,cd
于 2012-12-11T01:18:43.797 回答
1
RegEx 很好,但很难阅读。如果您更喜欢 C# 等语言中更详细的算法...
public string RemoveLastComma(string input)
{
if (input.Contains(",") == false)
return input;
int position = 0;
for (int i = input.Length; i > 0; i--)
{
if (input.Substring(i-1, 1) == ",")
{
position = i;
break;
}
}
var firstSegment = input.Substring(0, position-1);
var lastSegement = input.Substring(position, (input.Length - position));
return firstSegment + lastSegement;
}
于 2012-12-11T01:19:14.693 回答