Как получить первое соответствие из функции регулярное выражение найти все?

#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. Большое Вам спасибо @Виктор . Ты решил мою проблему. Сегодня узнал кое-что новое. Еще раз спасибо.