Regex تحويل السلسلة إلى رقم صالح، بدون علامة عشرية، التوقيع اختياري
-
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
أتمنى أن يساعدك هذا