2015-04-23 2 views
0

Можете ли вы рассказать мне, как узнать сумму $ string ниже, используя регулярные выражения? Я не очень хорошо регулярное выражение :(Заранее спасибо.

jone has done $15 per unit: "good luck" 

Результат должен быть = $ 15

ответ

3

Вы можете использовать очень простое регулярное выражение, как

\$\d+ 
  • \$ спичек $
  • \d+ Соответствует одной или нескольким цифрам

Regex Demo

Пример

string str = "jone has done $15 per unit: \"good luck\""; 
Regex pattern = new Regex (@"\$\d+"); 
Match match = pattern.Match(str); 
Console.WriteLine(match.Groups[0]); 
=> $15 

РЕДАКТИРОВАТЬ

Чтобы включить десятичные, а

\$\d+(?:\.\d+)? 
  • \. Соответствует десятичной запятой
  • \d+ соответствует одному или более цифр
  • ? Квантор, соответствует ноль или один шаблон presceding. Этот квантификатор обеспечивает необязательное сопоставление десятичной части.

Regex Demo

Пример

string str = "jone has done $15.5 per unit: \"good luck\""; 
Regex pattern = new Regex (@"\$\d+(?:\.\d+)?"); 
Match match = pattern.Match(str); 
Console.WriteLine(match.Groups[0]); 
=> $15.5 
+0

Можете ли вы также настроить его на десятичные знаки? – Sampath

+0

@Sampath Я отредактировал свой ответ. Надеюсь, это поможет вам :) – nu11p01n73R

+0

Да. Спасибо большое моему другу :) – Sampath

2

Вы можете попробовать это регулярное выражение:

@"\$\d+(\.\d+)?\b" 

Это будет соответствовать буквальное $, за которым следует число, которое будет соответствовать десятичных чисел также ,

+0

Спасибо за вашу поддержку тоже :) – Sampath

-1

Что об этом:

/\$\d*/ 

Для нескольких результатов:

/\$\d*/g 
0

Здесь совершенно другой подход без регулярных выражений с помощью LINQ и decimal.TryParse с правой культуры и NumberStyles.Currency:

string text = "jone has done $ per unit: \"good luck\""; 
var dollars = text.Split() 
    .Select(s => s.TryGetDecimal(usCI, NumberStyles.Currency)) 
    .Where(d => d.HasValue); 
Console.Write(string.Join(",", dollars)); // 15 

Использовал это расширение, чтобы попытаться разобрать строку до decimal?:

public static decimal? TryGetDecimal(this string item, IFormatProvider formatProvider = null, NumberStyles nStyles = NumberStyles.Any) 
{ 
    if (formatProvider == null) formatProvider = NumberFormatInfo.CurrentInfo; 
    decimal d = 0m; 
    bool success = decimal.TryParse(item, nStyles, formatProvider, out d); 
    if (success) 
     return d; 
    else 
     return null; 
} 
Смежные вопросы