2012-02-27 275 views
1

我在以下程序中提取某些数据时遇到了问题,它已用粗体和斜体标记。我想从文件中提取这些数据并按如下方式处理它。正则表达式匹配大括号内的数字

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

的Python教程这是一个家庭作业吗? – GWW 2012-02-27 04:41:26

+0

是的。我正在学习Python正则表达式...直到现在的正则表达式:re.findall(r'(0-9)',inputFile)。这里的问题是它可以匹配大括号内的那些,但我需要提取这些单独的匹配并处理它。 – RPK 2012-02-27 04:47:52

+0

如果问题是作业,请确保您将问题标记为作业。这可以让人们在没有为你做任务的情况下帮助你。 – GWW 2012-02-27 04:48:59

回答

1

您需要区分要在字符串中匹配的大括号和属于正则表达式的大括号。

所有类型的大括号对于正则表达式都有特殊含义,所以如果您想匹配它们,则需要将它们转义。

关于从您的评论

re.findall(R '(0-9)',INPUTFILE)

  • re.findall(link),您正则表达式需要一个字符串作为第二参数而不是文件句柄。

  • (0-9)只是匹配一个数字,并且由于方括号没有转义,值存储在捕获组中。 (Check here the paragraph (...))。如果您希望一次匹配多个数字的数字,您应该查看量词(+,*{m,n}与之前相同的链接)。

关于在OP

你都知道,你提供的代码已经没有太大的做任务(除了文件打开和关闭)你的代码。你可能想看看关于"Reading and Writing Files"

+0

我设法读取文件作为字符串使用这个正则表达式d = re.findall(r'\([0-9] \)',s)。这存储在d [0,1,.. i]中如何逐行读取它,并为'和','或'完成操作? – RPK 2012-02-27 08:49:28

+0

@RPK ???????? ?用正则表达式不能以字符串形式读取文件。您可以逐行读取文件(以字符串形式)或一次全部读入行(字符串)列表或一定数量的字节(以字符串形式)。我认为你应该立即读完所有内容并循环播放列表。看到我给你的链接,其非常简单。在循环内,你可以用每一行字符串做一些事情。 – stema 2012-02-27 09:03:38

+0

g1和6CAT(3)3CAT(2); 11CAT(15) 我想插入'和'逻辑来获取大括号之间的数字,现在我用d = re.findall(r'\([0-9] \)',s)。我得到(3),(2)但没有(15)。如何提取大括号之间的双位数字。 – RPK 2012-02-27 09:27:15

相关问题