#python-3.x #regex #list #output
Вопрос:
Я новичок в регулярных выражениях и python, мне нужно найти ключевое слово из текстового файла, и после успешного поиска строки я должен найти единственное число из строки. Но число печатается 6 раз. Мне нужен только первый результат для хранения в переменной в виде целого числа. Вот мой полный код. И строка, которую я ищу из файла .txt, называется «Lostn7». И номер, который я хочу получить из этой строки, — 7.
import re
with open('test.txt') as f:
for line in f:
# Capture one-or-more characters of non-whitespace after the initial match
# rsrp = re.search(r'RSRP:(S )', line)
packet_loss_search = re.search(r'Lost(S )',line)
# Did we find a match?
if (packet_loss_search):
# Yes, process it
details = packet_loss_search.group(0)
a=str(details)
#a=a[-1]
#print(a)
temp =re.findall(r'd ', a)
res = list(map(int, temp))
print(res[0])
выход:
7
7
7
7
7
7
Комментарии:
1. Попробуй
with open('test.txt') as f: print( re.search(r'Lostn(d )', f.read()).group(1) )
2. Вырывайтесь из петли, когда найдете совпадение.
3. Зачем вы используете
findall()
, если вам нужен только первый матч?4. Если мой ответ не решил вашу проблему, пожалуйста, рассмотрите возможность обновления вопроса.
Ответ №1:
Я бы предложил прочитать файл в память в виде одной строки, если ваши ожидаемые совпадения охватывают несколько строк. Вы могли бы исправить код, заменив его на
import re
with open('test.txt', 'r') as f:
m = re.search(r'Lostn(d )', f.read())
if m: # Check if there is a match
print(m.group(1))
Здесь f.read()
будет считано содержимое файла в одну строку, и Lostn(d )
будет соответствовать и захватывать в группу 1 любую одну или несколько цифр после Lost
символ новой строки.
Комментарии:
1. «процесс завершен с кодом выхода 0» Я пробовал «Потерянныйn(d )» раньше, но он ничего не печатает, как будто обнаруживает нуль или пробел. Но в файле .txt точная строка «n2866nLostn7 (0,24 %)». Где мне нужно найти 7 в виде целого числа.
2. @swarnendupanja Если отображается текстовый файл
n
(без разрыва строки), то вам нужноm = re.search(r'Lost\n(d )', f.read())
3. Большое Вам спасибо @Виктор . Ты решил мою проблему. Сегодня узнал кое-что новое. Еще раз спасибо.