Regex تحويل السلسلة إلى رقم صالح، بدون علامة عشرية، التوقيع اختياري

StackOverflow https://stackoverflow.com/questions/1611038

سؤال

أريد إزالة كل شيء بعد العلامة العشرية بما في ذلك، وكل شيء غير رقمي باستثناء الواصلة إذا كان الحرف الأول.حتى الآن لدي هذا: /[^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

أتمنى أن يساعدك هذا

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top