我的大脑一定很疲惫,但我不能让它工作,而且我几乎没有使用正则表达式的经验。
我有一个类似于"gfdsgfd354gfdgfd55gfdgfdgfs9gfdgsf“的字符串。
我需要一个正则表达式来查找字符串中的最后一个数字-在本例中是"9“。
编辑
我应该说得更清楚些,但是,正如我所说的,我很疲惫。
它是在最后一个数字之前插入一个连字符。我正在使用C# Regex.Replace。使用Dave Sexton已经提出的想法,我尝试了以下方法,但没有成功:
private string InsertFinalDigitHyphen(string data)
{
return Regex.Replace(data, @"(\d)[^\d]*$", " $1");
}有了这个,我可以处理"ABCDE1FGH“,目的是得到"ABCDE-1FGH”,但实际上我得到了"ABCDE-1“。
发布于 2013-06-11 21:48:01
你可以使用这个:
(\d)[^\d]*$编辑:
您最初只提到了匹配,没有语言,也没有替换。对于C#替换,您应该使用
private string InsertFinalDigitHyphen(string data) {
return Regex.Replace(data, @"(\d)(\D*)$", " $1$2");
}发布于 2013-06-11 21:56:24
我总是发现正则表达式很难读懂,所以你可以用下面的LINQ语句来替代它:
string str = "gfdsgfd354gfdgfd55gfdgfdgfs9gfdgsf";
var lastDigit = str.Last(char.IsDigit);输出:
9要在这之前插入连字符,可以使用LastIndexOf而不是Last,并使用该索引在字符串中的正确位置插入连字符。
发布于 2013-06-11 21:52:32
如果它是您想要的最后一个数字,请使用以下命令:
(\d)[^\d]*$如果它是最后一组数字,则使用以下命令:
(\d+)[^\d]*$编辑:
您需要选择捕获组(括号中的位)-对于c#,我认为应该是这样的:
Regex.Matches("gfdsgfd354gfdgfd55gfdgfdgfs9gfdgsf", '(\d)[^\d]+$')[0].Groups[1].Captures[0].Value或者,为了避免捕获组,您可以在regex后面进行查看,如下所示:
\d(?=[^\d]+$)https://stackoverflow.com/questions/17045765
复制相似问题