我的大脑必须疲惫不堪,但我不能让它工作,我对正则表达式的经验很少。
我有一个字符串,例如“gfdsgfd354gfdgfd55gfdgfdgfs9gfdgsf”。
我需要一个正则表达式来查找字符串中的最后一位数字 - 在本例中为“9”。
我应该更清楚,但正如我所说,我已经疲惫不堪。
在最后一位数字之前插入一个连字符。我正在使用C#Regex.Replace。使用Dave Sexton已经提出的想法,我尝试了以下但没有成功:
private string InsertFinalDigitHyphen(string data)
{
return Regex.Replace(data, @"(\d)[^\d]*$", " $1");
}
有了这个,我可以处理“ABCDE1FGH”,意图获得“ABCDE-1FGH”,但实际上我得到了“ABCDE-1”。
答案 0 :(得分:5)
我总是发现难以阅读的正则表达式,所以您可以使用以下LINQ语句以另一种方式执行此操作:
string str = "gfdsgfd354gfdgfd55gfdgfdgfs9gfdgsf";
var lastDigit = str.Last(char.IsDigit);
输出:
9
要在此之前插入连字符,您可以使用LastIndexOf
代替Last
,并使用该索引将连字符插入字符串中的正确位置。
答案 1 :(得分:4)
你可以使用这个:
(\d)[^\d]*$
编辑:
您最初只提到了匹配,没有语言,也没有替换。对于C#替换,您应该使用
private string InsertFinalDigitHyphen(string data) {
return Regex.Replace(data, @"(\d)(\D*)$", " $1$2");
}
答案 2 :(得分:1)
如果是您想要的最后一位数,请使用:
(\d)[^\d]*$
如果是最后一组数字,请使用:
(\d+)[^\d]*$
编辑:
你需要选择捕获组(括号中的位) - 对于c#我认为它会是这样的:
Regex.Matches("gfdsgfd354gfdgfd55gfdgfdgfs9gfdgsf", '(\d)[^\d]+$')[0].Groups[1].Captures[0].Value
或者为了避免捕获组,您可以使用正则表达式后面的样子:
\d(?=[^\d]+$)
答案 3 :(得分:0)
您也可以使用String.LastIndexOfAny:
执行此操作private string InsertFinalDigitHyphen(string data)
{
int lastDigit = data.LastIndexOfAny(new char[] {'0','1','2','3','4','5','6','7','8','9']);
return (lastDigit == -1) ? data : data.Insert(lastDigit, "-");
}