查找字符串中最后一位数的正则表达式是什么?

时间:2013-06-11 13:47:21

标签: c# regex

我的大脑必须疲惫不堪,但我不能让它工作,我对正则表达式的经验很少。

我有一个字符串,例如“gfdsgfd354gfdgfd55gfdgfdgfs9gfdgsf”。

我需要一个正则表达式来查找字符串中的最后一位数字 - 在本例中为“9”。

修改

我应该更清楚,但正如我所说,我已经疲惫不堪。

在最后一位数字之前插入一个连字符。我正在使用C#Regex.Replace。使用Dave Sexton已经提出的想法,我尝试了以下但没有成功:

    private string InsertFinalDigitHyphen(string data)
    {
        return Regex.Replace(data, @"(\d)[^\d]*$", " $1");
    }

有了这个,我可以处理“ABCDE1FGH”,意图获得“ABCDE-1FGH”,但实际上我得到了“ABCDE-1”。

4 个答案:

答案 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, "-");
}