2010-05-11 3 views
2

У меня будет другой тип строки (строка не будет иметь фиксированный формат, они будут разными каждый раз) из них я хочу удалить определенную подстроку. Как и строка может бытьRegex соответствует цифре в строке

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

Я хочу извлечь из этой строки Rs (цифру) и сохранить ее в одной переменной, а затем в этой строке не должно быть Rs (digit).

Какое должно быть регулярное выражение для этого?

EDIT

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()); 
} 

ответ

2

Если вы wan't извлечь только [ '2500', '4600,00', '700,00'], вы можете использовать следующие регулярные выражения с флагом многострочного включен

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

Edit: Добавлена ​​опциональная [+ -], и некоторые 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 

Edit:

Вы можете изменить

return match.Value.ToString(); 

в

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

возвратить только номер части.

+0

@ S.Mark, How is '[- +]? [0-9] * \.? [0-9] +'? – Harikrishna

+0

@Harikrishna, хорошо, если есть + или - infront этих, это хорошая идея. но '[- +]? [0-9] + (\. [0-9] +)?' было бы лучше, потому что десятичная часть могла быть проигнорирована. – YOU

+0

@Harikrishna, вы используете один в моем примере C#? '@" ([+ -]? \ d + (?: \. \ d +)?) \ D * $ "' – YOU

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... 
} 
1

Как

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

Это нормально? Проверьте регулярное выражение.

Смежные вопросы