Помогите составить это регулярное выражение

Если строка такого вида "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));

→ Ссылка