Я пытаюсь определить лучший способ поиска файла с помощью python для строки от 2 до 5 цифр и распечатать значение, если оно найдено сразу после этой строки: "BusID ="

Я не хочу распечатать всю строку, так как я ищу файл JSON, который является одной гигантской линией.

Мой образец файла выглядит так:

BusID = 98765
BusID = 987
BusID = 98/
foo BusID = 9876/ 
123
1234
2345 foo 
# 8912 foo foo foo foo
#7654
-8999
\6478
/9023
$7654
A3356
12345

Как я могу распечатать числовые значения любой длины после «busid =»?

Пока я могу напечатать строку, содержащую четырехзначное значение после знака равенства.

import re
myfile = open("C:\\Users\\frank\\sample_file.txt")
# read in the file as a list of lines
lines = myfile.readlines()
for line in lines:
    if "BusID" in line and re.search(r'\d\d\d\d', line) is not None:
        # print the line
        print(line)

Какие выводы

BusID = 98765
BusID = 987
BusID = 98/
foo BusID = 9876/ 

Как я могу распечатать только числовые значения? Я борюсь здесь и ценю любой ввод.

1
Kierk 18 Янв 2021 в 00:12

2 ответа

Лучший ответ

Использовать

import re
with open("C:\\Users\\frank\\sample_file.txt", "r") as myfile:
    print(re.findall(r'BusID\s*=\s*(\d+)', myfile.read()))

Регулярное выражение : BusID\s*=\s*(\d+)

Объяснение

--------------------------------------------------------------------------------
  BusID                    'BusID'
--------------------------------------------------------------------------------
  \s*                      whitespace (\n, \r, \t, \f, and " ") (0 or
                           more times (matching the most amount
                           possible))
--------------------------------------------------------------------------------
  =                        '='
--------------------------------------------------------------------------------
  \s*                      whitespace (\n, \r, \t, \f, and " ") (0 or
                           more times (matching the most amount
                           possible))
--------------------------------------------------------------------------------
  (                        group and capture to \1:
--------------------------------------------------------------------------------
    \d+                      digits (0-9) (1 or more times (matching
                             the most amount possible))
--------------------------------------------------------------------------------
  )                        end of \1
4
Ryszard Czech 17 Янв 2021 в 21:14

Если вам нужно только число после знака равенства, следующий код напечатает это число. print(line.split(' = ')[1])

Это будет заменять строку: {{{x0}}

1
UnknownPerson 17 Янв 2021 в 21:21