Регулярное выражение для сопоставления цифр в фигурных скобках - PullRequest
1 голос
/ 27 февраля 2012

У меня проблема с извлечением определенных данных в следующей программе, где они были выделены жирным шрифтом и курсивом. Я хочу извлечь эти данные из файла и обработать его следующим образом.

i 1CAT(0)

i 2CAT(1)

o 22CAT(10)

o 23CAT(9)

g1 ***and*** 6CAT(**3**) 3CAT(**2**) ; 11CAT(**5**)

g2 ***or*** 3CAT(**2**) 1CAT(**0**) ; 10CAT(**16**)

Пример:

строка 5: если (и) появляется, тогда сделайте 3 + 2 * 5

строка 6: если (или) появляется, то сделайте 2-0 + 16

и т.д ....

Код до сих пор:

import os
os.chdir('/home/pr/Documents/')
inputFile=open('C17.txt','r')
inputfile.readline()
print inputFile.read()
inputFile.close()

1 Ответ

1 голос
/ 27 февраля 2012

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

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

Относительно вашего регулярного выражения из вашего комментария

re.findall (г '(0-9)', файл_ввод)

  • re.findall (ссылка) , требуется строка в качестве второго аргумента, а не дескриптор файла.

  • (0-9) просто соответствует одной цифре, и поскольку скобки не экранированы, значение сохраняется в группе захвата. (см. Здесь абзац (...)) . Если вы хотите сопоставить числа с более чем одной цифрой одновременно, вам нужно взглянуть на квантификаторы (+, *, {m,n} такая же ссылка, как и раньше).

Относительно вашего кода в ОП

Вы знаете, что представленный вами код не имеет ничего общего с заданием (кроме открытия и закрытия файла). Возможно, вы захотите взглянуть на учебник по Python о «Чтение и запись файлов»

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