将数字附加到名称(字符串)

时间:2014-02-06 17:32:43

标签: c# regex string

我想在姓名中添加一个数字。结果应如name-1name-2name-3

问题是名称可能已经有数字的短划线和数字。在这种情况下,我想要增加数字,而不是要追加另一个数字。这用于复制功能。

另一个问题是该名称可能包含破折号,所以我不能使用string.split 有一个聪明的方法来做到这一点。也许用正则表达式?

private string generateName(string name, int count) 
{ 
    string.Format("{0}-{1}",name,count);
}

实施例: 输入=>输出中

name =>名称-1

name-1 =>名称-2

name-AB => name-AB-1

5 个答案:

答案 0 :(得分:2)

试试这个:

Match match = Regex.Match(name, @"^(.*)-([0-9]+)$", RegexOptions.IgnoreCase);
if (match.Success)
{
        return string.Format("{0}-{1}",match.Groups[1].Value, match.Groups[2].Value+ 1);
} else {
        return string.Format("{0}-{1}",name,count);
    }

答案 1 :(得分:1)

如果你不想使用正则表达式(有人发布了一个可爱的答案),你可以使用它:

private string generateName(string name, int count) 
{ 
    // Find last dash
    int dashPos = name.LastIndexOf("-");
    if (dashPos == 0) return string.Format("{0}-{1}",name,count);

    // Extract content after last dash
    string lastEl = name.SubString(dashPos+1);
    int lastNumber;

    // Check if it is a number
    bool isNumber = int32.TryParse(lastEl, out lastNumber)
    if (isNumber){
        return string.Format("{0}-{1}", name.SubString(0, dashPos), ++lastNumber);
    }

    return string.Format("{0}-{1}", name, count);
}

答案 2 :(得分:1)

仅仅因为您说string.Split ...

无法完成

您可以使用拆分方法。如果您的名称不包含' - ',则split将返回一个包含单个字符串的数组。如果结果数组包含多个字符串,您只需检查最后一个字符串是否为数字。

private string generateName(string name) 
{ 
    var parts = name.Split('-');
    int lastPart = parts.Length - 1;
    // If we have more than one part, then we have a '-' in our name
    if(lastPart > 0)
    {
        int count;
        // If the last "part" is a number, just increment it
        if(int.TryParse(parts[lastPart], out count))
        {
            count++;    // increment counter
            parts[lastPart] = count.ToString();
            return string.Join("-", parts);
        }
    }
    // If we got here, then our string didn't end with a "-" followed by a number;
    // just append "-1" to the end.
    return name + "-1";
}

使用您的示例值,这会产生正确的输出。此外,这还处理了最后有多个数字的情况:

╔══════════╦═══════════╗
║ Input    ║ Output    ║
╠══════════╬═══════════╣
║ name     ║ name-1    ║
║ name-1   ║ name-2    ║
║ name-AB  ║ name-AB-1 ║
║ name-1-2 ║ name-1-3  ║
╚══════════╩═══════════╝

答案 3 :(得分:0)

一种非常简单的方法

 string d = "asd-a-151532";
    int i = d.LastIndexOf('-');
    string t = d.Substring(i + 1, d.Length - i - 1);
    var n = int.Parse(t) + 1;
    d = d.Substring(0, i + 1) + n.ToString();

    Console.WriteLine(t);
    Console.WriteLine(d);

答案 4 :(得分:0)

这种模式应该有效:

@"(\w+(-([^-0-9])+)*)"

第一个值是名称,第二个值,如果有的话。 它应该工作到具有多个' - '字符的点。它对空字符没有任何作用。