Поиск регулярных выражений Python возвращает положительное нецелочисленное число <1 в виде пустой строки

#python #regex

#python #Регулярное выражение

Вопрос:

Я использую модуль регулярных выражений Python для поиска строки, примером интересующей строки является «* MBps 2.57».

Я использую следующий код:

  temp_string = re.search('MBps, d*.?d*', line)
 if (temp_string != None):
     temp_number = re.split(' ', temp_string.group(), 1)
 

Я хочу найти экземпляры, где MBps> 0, затем взять это число и обработать его.

Код работает нормально, пока число после MBps равно> 1. Например, если это ‘MBps 182.57’, объект регулярного выражения при преобразовании в строку показывает ‘MBps, 182.57’.

Однако, когда число после MBps равно <1, например, если это ‘MBps 0.31’, то возвращаемый объект RegEx показывает ‘MBps’, но не число. Это просто пустая строка, следующая за первым совпадением.

Я пробовал разные стратегии сопоставления регулярных выражений (re.match, re.findall), но ни одна из них, похоже, не работала правильно. На сайте тестирования regex101 он показал, что выражение регулярных выражений работает, но я не могу заставить модуль регулярных выражений Python соответствовать поведению.

Есть идеи о том, почему это происходит и как это исправить?

Спасибо

Комментарии:

1. MBps 0.31 не содержит запятой после MBps . Опечатка?

2. Да, это опечатка. Это должно быть Мбит / с, 0,31

Ответ №1:

Я бы использовал re.findall здесь:

 inp = "The first speed is 3.14 MBps and the second is 5.43 MBps"
matches = re.findall(r'b(d (?:.d )?) MBpsb', inp)
print(matches)
 

Это выводит:

 ['3.14', '5.43']
 

Комментарии:

1. Спасибо. Я попробовал, но он все равно не работал на 0,31 Мбит / с.

Ответ №2:

Хорошо, я нашел способ заставить это работать.

Я изменил код на:

 temp_string = re.search('MBps, [0-9.] ', line)
if (temp_string != None):
    temp_number = re.split(' ', temp_string.group(), 1)
 

Это сработало для захвата всех чисел. Я думаю, что явное соответствие регулярным выражениям, а не просто d или d *, делает эту работу лучше.

Спасибо