#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 *, делает эту работу лучше.
Спасибо