Помогите составить это регулярное выражение
Если строка такого вида "111.111,32", необходимо выбрать цифры до запятой:
Если строка такого вида "111,111.32", необходимо выбрать цифры до точки:
И обязательно, проверять, чтобы после запятой или точки было только 2 цифры. Как в нашем случае - 32.
Как это сделать одним регулярным выражением?
Пытался так:
(?(?=.).+?(?=,)|.+?(?=.))
Ответы (2 шт):
Автор решения: Alexander Petrov
→ Ссылка
Регулярное выражение:
^(.*?)[,.]\d{2}$
Результат будет в группе.
Пример на C#:
var values = new string[] { "111.111,32", "111,111.32" };
foreach (var value in values)
{
var match = Regex.Match(value, @"^(.*?)[,.]\d{2}$");
Console.WriteLine(match.Groups[1]);
}
Автор решения: ipatev_nn
→ Ссылка
Регулярное выражение
^\d+[.,]\d+(?=[.,]\d{2}$)
^ - начало строки
\d - цифра
+ - одно и более совпадений предшествующего шаблона
[.,] - точка или запятая
(?=...) - позитивный просмотр вперед, в захват не попадает
{2} - два совпадения предшествующего шаблона
$ - конец строки
Пример на JS:
const regex = /^\d+[.,]\d+(?=[.,]\d{2}$)/gm;
// Alternative syntax using RegExp constructor
// const regex = new RegExp('^\\d+[.,]\\d+(?=[.,]\\d{2})', 'gm')
const str = `123,111.32
321.111,32
111.111.111.111
abc.12
123.321
`;
console.log(str.match(regex));

