ما هو أقصر Regex الذي يمكن أن يطابق أرقام النقطة العائمة غير الصفرية مع أي عدد من الأماكن العشرية؟

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

  •  11-09-2019
  •  | 
  •  

سؤال

ما هو أقصر Regex الذي يمكن أن يطابق أرقام النقطة العائمة غير الصفرية مع أي عدد من الأماكن العشرية؟

يجب أن تقبل الأرقام مثل

-1
-5.9652
-7.00002
-0.8
-0.0500
-0.58000
0.01
0.000005
0.9900
5
7.5
7.005

لكن رفض الإنشاءات مثل

.
.02
-.
-.996
0
-0
0.
-0.
-0.000
0.00
--
..
+
+0
+1
+.
+1.26
,etc

لا أحتاج إلى دعم التدوين العلمي، مع E، E ومثل هذا.
اللغة التي أستخدمها هي C #، بالمناسبة.

هل كانت مفيدة؟

المحلول

^-?(0\.\d*[1-9]|[1-9]\d*(\.\d+)?)$

تعديل تم التحديث ليعكس متطلبات جديدة (آخر عشرية يمكن أن يكون صفر)

^-?(0\.\d*[1-9]\d*|[1-9]\d*(\.\d+)?)$

(أقصر من استخدام Lookahead: ^-?(0\.(?=[1-9])\d*|[1-9]\d*(\.\d+)?)$.)


Edit2. إذا على سبيل المثال 001.000 يمكن أن تمر

^-?(?=.*[1-9])\d+(\.\d+)?$

نصائح أخرى

هذا هو الشخص الذي أستخدمه دائما:

(\+|-)?([0-9]+\.?[0-9]*|\.[0-9]+)([eE](\+|-)?[0-9]+)?

يستخدم في مثال PHP:

<?php

$s= '1.234e4';

preg_match('~(\+|-)?([0-9]+\.?[0-9]*|\.[0-9]+)([eE](\+|-)?[0-9]+)?~', $s, $m);
print_r($m);

?>

انتاج:

Array
(
    [0] => 1.234e4
    [1] =>
    [2] => 1.234
    [3] => e4
)
-?(?!0)\d+(\.\d+)?

ملاحظة: تذكر وضع ^ $ إذا لم يتم ذلك بواسطة Matcher Regexp الخاص بك.

هل لي أن أسأل لماذا "أقصر"؟ يمكن أن تكون مجموعة مترجم مسبقا أو نفسها مع مجموعات غير مطابقة أسرع. أيضا اختبار الصفر قد يكون أسرع أيضا.

قد ترغب في النظر هذه الاختلافات.

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