Подтвердить что ты не робот

Как использовать регулярное выражение с необязательными символами в python?

Скажем, у меня есть строка

"3434.35353"

и еще одна строка

"3593"

Как создать одно регулярное выражение, которое может совпадать и без меня, чтобы установить шаблон на что-то другое, если другой не удается? Я знаю, что \d+ будет соответствовать 3593, но он ничего не сделает для 3434.35353, но (\d+\.\d+) будет соответствовать только одному с десятичной точкой и не будет возвращать совпадений для 3593.

Я ожидаю вернуть m.group(1):

"3434.35353"

или

"3593"
4b9b3361

Ответ 1

Вы можете поместить ? после группы символов, чтобы сделать его необязательным.

Вам нужна точка, за которой следует любое количество цифр \.\d+, сгруппированные вместе (\.\d+), необязательно (\.\d+)?. Вставьте это в свой шаблон:

import re
print re.match("(\d+(\.\d+)?)", "3434.35353").group(1)
3434.35353
print re.match("(\d+(\.\d+)?)", "3434").group(1)
3434

Ответ 2

Это регулярное выражение должно работать:

\d+(\.\d+)?

Он соответствует одной или нескольким цифрам (\d+), за которыми следует точка и одна или несколько цифр ((\.\d+)?).

Ответ 3

Используйте квантор "один или нуль", ?. Ваше регулярное выражение будет: (\d+(\.\d+)?).

Подробнее о доступных доступных кванторах и о том, как их использовать, см. в главе 8 руководства TextWrangler.

Ответ 4

Читайте в библиотеке Python RegEx. Ссылка отвечает на ваш вопрос и объясняет, почему.

Однако, чтобы сопоставить цифру, а затем большее число цифр с необязательным десятичным числом, вы можете использовать

re.compile("(\d+(\.\d+)?)")

В этом примере,? после того, как группа захвата .\d+ указывает, что эта часть является необязательной.

Пример

Ответ 5

использовать (?:<characters>|). замените <characters> строкой, чтобы сделать необязательным. Я протестировал в оболочке Python и получил следующий результат:

>>> s = re.compile('python(?:3|)')
>>> s
re.compile('python(?:3|)')
>>> re.match(s, 'python')
<re.Match object; span=(0, 6), match='python'>
>>> re.match(s, 'python3')
<re.Match object; span=(0, 7), match='python3'>'''