Регулярное выражение соответствует и меняет формат, если не совпадает - PullRequest
0 голосов
/ 18 октября 2019

Мне нужна помощь, чтобы сопоставить каждую строку файла с форматом REGEX и, если не совпадает, переформатировать строку на основе формата REGEX.

О файле: В каждой строке изменяется только 10 цифр (1234567890) после qr в каждой строке.

Проблема: сейчас я НЕ могу провести матч. Мой вывод - это просто вывод ELSE даже в правильном формате.

Заранее благодарю за помощь!

import re

filepath = 'fruit.txt'

def main():
    # mode function to check that the file is in open mode.
    with open(filepath) as fp:
        cnt = 1
        for line in fp:
            #Matching correct format: fruit_id (iid 43210, qr 1234567890,mo 001212121)
            matchLn = re.match(r'fruit_id\s+\(iid\s+43210,\s+qr\s+1\d\{10},mo\s+001212121\)', line, re.M|re.I)
            print("Matching Pattern with : {}".format(line))
            #if pattern.match(line):
            if matchLn:
                print('Matched format:', cnt)
            else:
                print('Check the format of the line:', cnt)
                # I need to make sure the line matches the format)
            cnt = cnt + 1
main()

fruit.txt:

   fruit_id (iid 43210, qr 1234567890,mo 001212121)
   fruit_id (iid 43210, qr 1235567890,mo 001212121)
   fruit_id (iid 43210, qr 1225367890,mo 001212121)
   fruit_id (iid 43210, qr 1274567890,mo 001212121)
   fruit_id (iid 43210, qr 1279567890,mo 001212121)
   fruit_id (iid 43210, qr 1245637890,mo 001212121)
   fruit_id (iid 43210, qr 1234457890,mo 001212121)
   fruit_id (iid 43210, qr 1234532890,mo 001212121)

Вывод:

Matched format: 1
Matched format: 2
Matched format: 3
Matched format: 4
Matched format: 5
Matched format: 6
Matched format: 7
Matched format: 8
Copying the file to a path..

1 Ответ

1 голос
/ 18 октября 2019

Ваше регулярное выражение содержит следующие проблемы:

  • Префикс динамического номера использует 'dn' вместо 'qr'
  • Дополнительный '1' соответствует предшествующему динамическому номеру
  • Квантификатор '{' экранирован, поэтому соответствует литералу
  • Префикс последнего значения использует 'sp' вместо 'mo'

Вот примеррегулярное выражение, исправляющее эти проблемы:

\s*fruit_id\s+\(iid\s+43210,\s+qr\s+\d{10},mo\s+001212121\)

Также обратите внимание, что регулярное выражение в регулярных выражениях 101 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...