#python #regex
#python #регулярное выражение
Вопрос:
Как создать регулярное выражение, чтобы проверить, является ли строка числом с плавающей запятой с 7 цифрами и любым значением после запятой?
Приемлемо в качестве десятичного разделителя; : — , . ?
Итак, мне нужно:
import re
rgx = re.compile('What is the regex sintaxe for it ?')
tests=[7000000.00 7000000:00 7000000,00 7000000-00 7AAAAAA.00 700000000.00 70.00]
for s in tests:
m = rgx.search(s)
print(bool(m), s)
True 7000000.00
True 7000000:00
True 7000000,00
True 7000000-00
False 7AAAAAA.00
False 700000000.00
False 70.00
]
Пример использования регулярных выражений
import re
rgx = re.compile(r'd (?:,d*)?')
tests=['7000000.00', '7000000:00', '7000000,00', '7000000-00', '7AAAAAA.00', '700000000.00', '70.00']
for s in tests:
m = rgx.search(s)
print(bool(m), s)
Комментарии:
1. Можете ли вы показать воспроизводимый пример вашего кода? То, что вы показали в вопросе, синтаксически неверно
2. Мне просто нужно синтаксическое регулярное выражение; Но хорошо, я опубликую для вас несколько примеров.
3. Этот сайт отлично подходит для разработки шаблонов регулярных выражений pythex.org
Ответ №1:
Проверьте 7 digits
, за которым следует единица non whitespace, non digit and non alphanumeric character
и заканчивается на unlimited numbers
:
import re
rgx = re.compile(r'[0-9]{7}[SDW]{1}[0-9]
Out:
(True, '7000000.00')
(True, '7000000:00')
(True, '7000000,00')
(True, '7000000-00')
(False, '7AAAAAA.00')
(False, '700000000.00')
(False, '70.00')
Комментарии:
1. Спасибо, не могли бы вы объяснить, как работает синтаксис регулярных выражений для этого случая, пожалуйста?
2. @Kinille: выдает тот же результат, что и ваш, и то, что ожидает op.
3. @MauriceMeyer Я тестирую их взад и вперед, и у них разные результаты в шестом случае? Редактировать, я изучаю, как мое тестирование неверно
4. @Kinille: я получаю 4 истины и 3 ложности в Python 2.7 и 3.9
5. Ваш шаблон неверен из-за
[SDW]{1}
.S
содержит цифры. Так12345678910111213
будет соответствовать вашему шаблону. Кроме того,W
включено внутриD
(посколькуd
включено внутриw
). Короче[SDW]{1}
говоря, это точно так.
же (сre.dotall
флагом, поскольку он также соответствует новым строкам). Я думаю, что символьный класс с разрешенным только десятичным разделителем (и без квантора) более прост и работает.
Ответ №2:
После указания класса символов вы можете указать, сколько из этого символа необходимо, используя фигурные скобки, т.е. {1,2} означает от 1 до 2 символов или {4} означает 4 символа
re.compile(r'(^|D)d{7}[-.;:,]d ')
Вот краткое изложение регулярного выражения:
(^|D)
Означает, что либо символ не должен быть числом, либо должен быть началом строки
d{7}
Семь цифр подряд
[-.;:,]
Любой из ваших символов, обозначающий десятичную точку
d
Одна или несколько цифр
Конечно, вы можете добавить ^ и $, чтобы убедиться, что число является единственным в строке, если это полезно.
Комментарии:
1. Не слишком быстро! Каждый сокращенный символьный класс
d
,w
,s
... имеет свое дополнение (в смысле теории множеств),D
,W
,S
...
)
# [0-9]{7} >> Seven digits
# [SDW]{1} >> One non whitespace, non digit and non alphanumeric character
# [0-9].$ >> Ends with unlimited numbers
tests = "7000000.00 7000000:00 7000000,00 7000000-00 7AAAAAA.00 700000000.00 70.00"
for t in tests.split(" "):
print(True if rgx.match(t) else False, t)
Out:
Комментарии:
1. Спасибо, не могли бы вы объяснить, как работает синтаксис регулярных выражений для этого случая, пожалуйста?
2. @Kinille: выдает тот же результат, что и ваш, и то, что ожидает op.
3. @MauriceMeyer Я тестирую их взад и вперед, и у них разные результаты в шестом случае? Редактировать, я изучаю, как мое тестирование неверно
4. @Kinille: я получаю 4 истины и 3 ложности в Python 2.7 и 3.9
5. Ваш шаблон неверен из-за
[SDW]{1}
.S
содержит цифры. Так12345678910111213
будет соответствовать вашему шаблону. Кроме того,W
включено внутриD
(посколькуd
включено внутриw
). Короче[SDW]{1}
говоря, это точно так.
же (сre.dotall
флагом, поскольку он также соответствует новым строкам). Я думаю, что символьный класс с разрешенным только десятичным разделителем (и без квантора) более прост и работает.
Ответ №2:
После указания класса символов вы можете указать, сколько из этого символа необходимо, используя фигурные скобки, т.е. {1,2} означает от 1 до 2 символов или {4} означает 4 символа
Вот краткое изложение регулярного выражения:
(^|D)
Означает, что либо символ не должен быть числом, либо должен быть началом строки
d{7}
Семь цифр подряд
[-.;:,]
Любой из ваших символов, обозначающий десятичную точку
d
Одна или несколько цифр
Конечно, вы можете добавить ^ и $, чтобы убедиться, что число является единственным в строке, если это полезно.
Комментарии:
1. Не слишком быстро! Каждый сокращенный символьный класс
d
,w
,s
… имеет свое дополнение (в смысле теории множеств),D
,W
,S
…