Резюме
Я пытаюсь использовать регулярное выражение, чтобы найти точное число (то есть число, понятное человеку, а не саму цифру) в большей строке. Число, которое я пытаюсь найти, будет различным. Это может быть целое число или десятичное число, и это может быть одна цифра или несколько цифр.
Примеры
- Если вы пытаетесь сопоставить число 2, я хочу, чтобы оно нашло 2 в
x + 2 + 3
, а не в 2.5
, 2.52
или 5.2
(потому что это цифра 2, а не фактическое число 2).
- Если попытаться сопоставить число 2,5, я хочу, чтобы оно нашло 2,5 в
x + 2.5 + 3
и 2.5
, но не 2.52
или 12.5
.
Обратите внимание, что 2 и 2.5 - только примеры, я хочу, чтобы это работало для любого произвольного положительного числа (если оно работает для отрицательных чисел, это не проблема, но это также и не является обязательным).
Начальная попытка
Я начал с (\bX\b)+
(где X будет номером, который я хочу сопоставить), который работает, когда X равен 2,5, но не когда X равен 2. Это потому, что он использует разрывы слов для определения начала и конца число, но десятичная точка считается как разрыв слова. Это означает, что если X равен 2 (то есть регулярное выражение равно (\b2\b)+
), оно будет соответствовать числу 2 (правильно), но также 2.x
(неверно) и x.2
(также неверно).
Текущая попытка
Я исправил проблему 2.x
, изменив выражение на (\bX\b(?!\.))+
. Это исключает числа, где за X следует десятичная точка, поэтому, если X равно 2, оно будет соответствовать 2
(правильно), не будет соответствовать 2.x
(правильно), но все равно будет соответствовать x.2
(неправильно). Если X - десятичное число, это работает правильно (поэтому, если X равно 2,5, оно будет правильно соответствовать 2.5
и исключать 12.5
или 2.51
).
Как мне избежать совпадения X, если ему предшествует десятичная точка?
Реальный вариант использования
Если это поможет, конечная цель - использовать это с функцией C # Regex.Replace следующим образом:
private static string ReplaceNumberWithinFormula(string originalFormula, double numberToReplace, string textToReplaceNumberWith)
{
return Regex.Replace(originalFormula, $@"(\b{numberToReplace}\b(?!\.))+", textToReplaceNumberWith);
}