-1

我有一个包含逗号的列表,但我在同一个列表中也有其他逗号我不想删除,所以我想知道有没有办法只删除每行文本的最后一个逗号?

4

4 回答 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,ca,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 回答