正则表达式匹配字符串中的数字

时间:2010-05-11 06:55:22

标签: c# regex winforms string

我将有一个不同类型的字符串(字符串不会有固定格式,它们每次都会不同)从它们我要删除一些特定的子字符串。像字符串一样可以

OPTIDX 26FEB2009 NIFTY CE 2500
OPTIDX NIFTY 30 Jul 2009 4600.00 PE
OPTSTK ICICIBANK 30 Jul 2009 700.00 PA

我想从这些字符串中提取Rs。(数字)并将其存储到一个变量中,然后在那些字符串中不应该有Rs。(数字)。

那应该是什么样的正则表达式?

修改

private string ExtractingRupeesFromString(String str)
{
    Match match = Regex.Match(cellRecord, @"(\d+(?:\.\d+)?)\D*$");
    return match.Value.ToString();
}

for(int i=0;i<datagridview1.Rows.Count;i++)
{
    datagridview1["Rs",i].Value=ExtractingRupeesFromString(datagridview1["ScriptName",i].Value.ToString());
}

3 个答案:

答案 0 :(得分:2)

如果你不想仅提取['2500','4600.00','700.00'],你可以使用以下正则表达式并启用MULTILINE标志

@"([+-]?\d+(?:\.\d+)?)\D*$"

修改:添加了可选的[+ - ]和一些C#代码

string s = @"
OPTIDX 26FEB2009 NIFTY CE 2500
OPTIDX NIFTY 30 Jul 2009 4600.00 PE
OPTSTK ICICIBANK 30 Jul 2009 700.00 PA
";
Regex re = new Regex(@"([+-]?\d+(?:\.\d+)?)\D*$",RegexOptions.Multiline);
foreach (Match a in re.Matches(s)){
    System.Console.WriteLine(a.Groups[1]);
}

//2500
//4600.00
//700.00

修改

你可以改变

return match.Value.ToString();

return match.Groups[1].ToString();

仅返回数字部分。

答案 1 :(得分:1)

怎么样

Match match = Regex.Match(str, @"[-+]?[0-9]*\.?[0-9]+");
Rupees=str.Substring(match.Index,match.Length);

可以吗?请检查正则表达式。

答案 2 :(得分:0)

我同意jack30lena。这可以通过正则表达式轻松完成。

例如:

Regex blabla = new Regex(@"([^0-9]*(?<number>[0-9])+)*");
MatchCollection matches = blabla.matches("OPTIDX 26FEB2009 NIFTY CE 2500");
foreach(Match m in matches)
{
string number = m.Groups["number"].Value;
//do something with the match...
}