Повторное выражение для извлечения числа десятичных чисел / чисел с плавающей точкой может быть различным в зависимости от того, используются ли какие-либо разделители тысяч, какой символ обозначает десятичный разделитель, нужно ли также соответствовать экспоненте, соответствовать ли положительному или отрицательному знаку, независимо от того, соответствуют ли номера, которые могут иметь ведущие 0
, исключить или не извлекать число, которое заканчивается десятичным разделителем.
Общее регулярное выражение для соответствия наиболее распространенным типам десятичных чисел приведено в Согласование чисел с плавающей запятой с регулярным выражением :
[-+]?[0-9]*\.?[0-9]+(?:[eE][-+]?[0-9]+)?
Я только изменил группу захвата на не захватывающий (добавлено ?:
после (
). Он соответствует
Если вам нужно сделать его еще более общим, если десятичный разделитель может быть точкой или запятой, замените \.
с символьным классом (или выражением скобки) [.,]
:
[-+]?[0-9]*[.,]?[0-9]+(?:[eE][-+]?[0-9]+)?
^^^^
Обратите внимание, что выражения выше соответствуют как целым, так и поплавкам . Чтобы сопоставить только числа с плавающей запятой / десятичные числа, убедитесь, что часть дробного шаблона является обязательной, удалив вторую ?
после \.
( demo ):
[-+]?[0-9]*\.[0-9]+(?:[eE][-+]?[0-9]+)?
^
Теперь 34
не сопоставляется: сопоставляется.
Если вы не хотите сопоставлять числа с плавающей запятой без начальных нулей (например, .5
), то сделать первый знак соответствия шаблону обязательным (по добавление квантора +
, чтобы соответствовать 1 или более вхождений цифр):
[-+]?[0-9]+\.[0-9]+(?:[eE][-+]?[0-9]+)?
^
См. эту демонстрацию . Теперь оно соответствует значительно меньшему количеству образцов:
Теперь, если вы не хотите сопоставлять
внутри
? Как сопоставить их как целые слова? Используйте lookarounds :
[-+]?(?
И демо-версия здесь :
Теперь, как насчет тех плавающих с тысячами разделителей, как 12 123 456.23
или 34,345,767.678
? Вы можете добавить (?:[,\s][0-9]+)*
после первого [0-9]+
, чтобы соответствовать нулевым или более последовательностям запятой или пробелам, за которыми следуют 1 + цифры:
[-+]?(?
См. Демонстрацию regex :
Поменяйте запятую на \.
, если вам нужно использовать запятую как разделитель десятичной дроби и период как разделитель тысяч.
Теперь, как использовать эти шаблоны в C #?
var results = Regex.Matches(input, @"")
.Cast()
.Select(m => m.Value)
.ToList();
Согласно официальной документации nginx попробуйте использовать:
if (($request_body ~* (.*)clientID#1(.*)) )
{
proxy_pass server1;
}
if (($request_body ~* (.*)clientID#2(.*)) ) {
proxy_pass server2;
}
}