Можете ли вы рассказать мне, как узнать сумму $ string ниже, используя регулярные выражения? Я не очень хорошо регулярное выражение :(Заранее спасибо.
jone has done $15 per unit: "good luck"
Результат должен быть = $ 15
Можете ли вы рассказать мне, как узнать сумму $ string ниже, используя регулярные выражения? Я не очень хорошо регулярное выражение :(Заранее спасибо.
jone has done $15 per unit: "good luck"
Результат должен быть = $ 15
Вы можете использовать очень простое регулярное выражение, как
\$\d+
\$
спичек $
\d+
Соответствует одной или нескольким цифрамПример
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. Этот квантификатор обеспечивает необязательное сопоставление десятичной части.Пример
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
Вы можете попробовать это регулярное выражение:
@"\$\d+(\.\d+)?\b"
Это будет соответствовать буквальное $
, за которым следует число, которое будет соответствовать десятичных чисел также ,
Спасибо за вашу поддержку тоже :) – Sampath
Что об этом:
/\$\d*/
Для нескольких результатов:
/\$\d*/g
Здесь совершенно другой подход без регулярных выражений с помощью 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;
}
Можете ли вы также настроить его на десятичные знаки? – Sampath
@Sampath Я отредактировал свой ответ. Надеюсь, это поможет вам :) – nu11p01n73R
Да. Спасибо большое моему другу :) – Sampath