Sergomen
@Sergomen
Просто делай добро и оно вернётся

Как получить число между определённых знаков?

Нужно взять число между парой @@.
Пробую сделать через регулярные выражения:

import re 
t = "text @@-12346764853@@ text fgtdytd"
r = re.findall(r'[@@]\w+[@@]',t)

Но почему-то возвращаются пустые скобки [].

Я же вроде правильно делаю: в скобках знак\знаки которые ищутся, \w+ - любой текст, в скобках знаки которые ищутся.
В чем я ошибся?
  • Вопрос задан
  • 115 просмотров
Решения вопроса 3
0xD34F
@0xD34F Куратор тега Регулярные выражения
Нужно взять число

\w+

\w+ - это не число. Число - это минус (возможно отсутствует), затем целая часть (цифры), затем дробная часть (точка и цифры, возможно отсутствует).

между парой @@

[@@]

В квадратных скобках указывается набор возможных символов. Поскольку символ один, квадратные скобки не нужны. Зато можно воспользоваться фигурными, в которых указывается количество повторений - @{2}. Или можно просто два раза нужный символ указать.

re.findall(r'(?<=@@)-?\d+(?:\.\d+)?(?=@@)', text)
Ответ написан
Комментировать
SoreMix
@SoreMix Куратор тега Python
yellow
\w - это A-z0-9
У вас стоит после @ знак минус. Который не входит в зону A-z0-9

Если нужнен любой контент между скобок - лучше используйте либо .+, либо \S+.
. - любой символ
\S - любой непробельный символ

re.findall(r'@@(\S+?)@@', t).groups(1)

Ну и если с регексом не знакомы, попробуйте использовать сервисы вроде https://regex101.com/
Он подсвечивает обозначение каждого знака и группы, полученные при поиске
Ответ написан
@dmshar
def is_number(str):
    try:
        float(str)
        return True
    except ValueError:
        return False
t = "text @@-12346764853@@ text fgtdytd@@-12.346@@ hfghsgf @@162.4@@"
r = t.split('@@')
print(list(filter(is_number, r)))


Результат
['-12346764853', '-12.346', '162.4']
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы