Регулярное выражение преобразует строку в допустимое число, без десятичной дроби, знак необязателен
-
05-07-2019 - |
Вопрос
Я хочу удалить все после десятичной дроби, включая десятичную, и все нечисловое, кроме дефиса, если это первый символ.Пока у меня есть это: /[^0-9^-]|[^\.]+$/
.Обратите внимание, как я блокирую удаление тире с помощью ^-
, потому что почему-то я хочу удалить только тире, которые не являются первым символом (а не знаком).Любая помощь?Спасибо.
Я просто хочу, чтобы это удалили
- Любые символы, кроме 0–9, кроме первого символа, если это тире (отрицательный знак).
- Все после десятичной точки включительно
Бывший.:10js-_67.09090FD
=> 1067
-10a.h96
=> -10
РЕДАКТИРОВАТЬ:Неважно, я подошел к этому неправильно, пытаясь сопоставить чужие символы, и понял, что мне не следует использовать для этого регулярное выражение.Спасибо за ваши ответы, я немного узнал о регулярных выражениях, и, возможно, кто-то еще с похожей проблемой найдет это.
Решение
Попробуй это:
Regex numbers = new Regex(@"^(-?\d*)[^0-9]*(\d*)\.",
RegexOptions.ECMAScript | RegexOptions.Multiline);
foreach (Match number in numbers.Matches("10js-_67.09090FD"))
{
Console.WriteLine(
Int32.Parse(
number.Groups[1].Value +
number.Groups[2].Value));
}
Или этот:
Console.WriteLine(
Int32.Parse(
Regex.Replace(
"10js-_67.09090FD",
@"^(-?\d*)[^0-9]*(\d*)\.([\s\S]*?)$", "$1$2",
RegexOptions.ECMAScript | RegexOptions.Multiline)));
Или этот:
var re = /^(-?\d*)[^0-9]*(\d*)\.([\s\S]*?)$/
alert(parseInt("10js-_67.09090FD".replace(re, "$1$2"),10));
Другие советы
Это было бы /^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/\1\2/
(используйте для sed, поскольку вы не говорите мне, какой язык вы используете).
/^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/
// '^' ==>l From the Start
// '(..)' ==>l Group 1
// '-?' ==>l An optiona '-'
// '[0-9]+' ==>l Some numbers
// '[^0-9\.]*' ==>l Anything but numbers and dot
// '(..)' ==>l Group 2 (So this is the number after the dot)
// '[0-9]*' ==>l Some numbers
// '.*$' ==>l The rest
Затем напечатайте только группу 1 и группу 2 (/\1\2/).
Тесты:
$:~/Desktop$ echo "10js-_67.09090FD" | sed -r "s/^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/\1\2/"
1067
$:~/Desktop$ echo "-10a.h96" | sed -r "s/^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/\1\2/"
-10
Надеюсь это поможет