Как извлечь значения с плавающей запятой и число c с помощью регулярных выражений? - PullRequest
0 голосов
/ 31 марта 2020

У меня есть строка

MATERIAL :    51670 TUD1 =  .1200  m    TLD1 =  .0750  m TUD2 =  .0620  m    TLD2 =  .0380  m TUDH =  .0680  m    TLDH = .0420  m

Я хочу извлечь только [51670, .1200, .0750, .0620, .0380, .0680, .0420]

Я попытался re.findall("[-+]?\d*\.\d+|\d+", lines), но он возвращает [' 51670', '1', '.1200', '1', '.0750', '2', '.0620', '2', '.0380', '.0680', '.0420'], что не то, что я хочу. Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 31 марта 2020

Я бы сделал:

import re
lines = 'MATERIAL :    51670 TUD1 =  .1200  m    TLD1 =  .0750  m TUD2 =  .0620  m    TLD2 =  .0380  m TUDH =  .0680  m    TLDH = .0420  m'
numbers = re.findall(r"\s(\.?\d+)\s",lines)
print(numbers)

Вывод:

['51670', '.1200', '.0750', '.0620', '.0380', '.0680', '.0420']

Я просто ищу 0 или 1 . (\.?), за которыми следуют 1 или более цифр (\d+), которые находятся между пробелами (\s). Я поставил \s вне группы, чтобы они не появлялись в numbers. Обратите внимание, что приведенный выше код найдет все числа из вашего примера, но не такие, как 12.34 - чтобы найти их, также используйте r"\s(\d+\.?\d+)\s". Обратите внимание, что . необходимо экранировать как символ со специальным значением.

1 голос
/ 31 марта 2020

Вы можете использовать

(?<!\w)[-+]?\d*\.?\d+(?!\d)

См. Демоверсию regex

Здесь образец соответствует

  • (?<!\w) - a положение в строке, которому непосредственно не предшествует слово char (буква, di git или _). Чтобы разрешить _, замените (?<!\w) на (?<![^\W_])
  • [-+]? - необязательный - или +
  • \d*\.?\d+ - 0+ цифр, точка выбора и 1+ цифры
  • (?!\d) - без ди git допускается сразу справа от текущего местоположения.

См. Python демо :

import re
text = "MATERIAL :    51670 TUD1 =  .1200  m    TLD1 =  .0750  m TUD2 =  .0620  m    TLD2 =  .0380  m TUDH =  .0680  m    TLDH = .0420  m"
print( re.findall(r'(?<!\w)[-+]?\d*\.?\d+(?!\d)', text) )
# => ['51670', '.1200', '.0750', '.0620', '.0380', '.0680', '.0420']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...