我想在姓名中添加一个数字。结果应如name-1
,name-2
,name-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
答案 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])+)*)"
第一个值是名称,第二个值,如果有的话。 它应该工作到具有多个' - '字符的点。它对空字符没有任何作用。