Каков самый короткий regex, который может соответствовать ненулевым числам с плавающей точкой какому-либо количеству десятичных разрядов?

Это полностью зависит от того, насколько большой проект, какой длины классы, если они будут использоваться из других файлов и так далее.

, Например, я довольно часто использую серию классов для абстракции данных - таким образом, у меня может быть 4 или 5 классов, которые могут только быть 1 строкой долго (class SomeData: pass).

было бы глупо разделить каждый из них в отдельные файлы - но так как они могут использоваться из различных файлов, помещая все они в отдельном data_model.py, файл имел бы смысл, таким образом, я могу сделать from mypackage.data_model import SomeData, SomeSubData

, Если у Вас есть класс с большим количеством кода в нем, возможно, с некоторыми функциями только это использует, это была бы хорошая идея разделить этот класс и функции помощника в отдельный файл.

необходимо структурировать их так, Вы делаете from mypackage.database.schema import MyModel, не from mypackage.email.errors import MyDatabaseModel - если, куда Вы импортируете вещи из, имеют смысл, и файлы не являются десятками тысяч строк долго, Вы организовали его правильно.

документация Модулей Python имеет немного полезной информации об организации пакетов.

8
задан luvieere 2 December 2009 в 09:29
поделиться

3 ответа

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

РЕДАКТИРОВАТЬ Обновлено для отражения новых требований (последние десятичные дроби могут быть нулевыми)

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

(Короче, чем использование опережающего просмотра: ^ -? (0 \. (? = [1-9]) \ d * | [1-9] \ d * (\. \ D +)?) $ .)


EDIT2 Если, например, 001.000 может пройти

^-?(?=.*[1-9])\d+(\.\d+)?$
7
ответ дан 5 December 2019 в 21:20
поделиться

Это тот, который я всегда использую:

(\ + | -)? ([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
ответ дан 5 December 2019 в 21:20
поделиться
-?(?!0)\d+(\.\d+)?

Примечание: не забудьте поставить ^ $, если это не выполняется вашим сопоставителем регулярных выражений.

Могу я спросить, почему "самый короткий"? Прекомпилятор RegExp или то же самое с несовпадающими группами может быть быстрее. Также тест на ноль тоже может быть быстрее.

0
ответ дан 5 December 2019 в 21:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: