任何人都可以帮我纠正这个“argv”程序吗?

时间:2015-04-09 07:39:23

标签: python python-3.x

import sys
import re

x = sys.argv[1]
y = sys.argv[2]

f = open("formula.txt" ,'r')
line = f.read()
match = re.search(r'x',line,re.M|re.I)

match = re.search(r'y',line,re.M|re.I)

f.close()
print x
print y

我尝试过以上程序,但我无法获得输出?

欲望输出应遵循:

当我想执行上述程序时;

>>>python argument.py circle_area rectangle_area

输出应该是这样的:

x = 2*3.14*r*r
y = l*b

程序中的给定文件是formula.txt

formula.txt文件包含以下数据;

circle_area = '3.14*r*r'

circle_circumference = '2*3.14*r'

rectangle_area = 'l*b'

rectangle_perimeter = '2(l+b)'
------------------------------------
~    

任何人都可以帮我实现上述目标。

2 个答案:

答案 0 :(得分:2)

你的代码犯了很多错误。

  • 不要将变量名称放在引号内。

  • 使用捕获组或外观来匹配要打印的文本。

  • 使用.group()函数中的re.search属性来获取匹配的文字。

代码看起来应该像。

import sys
import re

x = sys.argv[1]
y = sys.argv[2]

f = open("formula.txt" ,'r')
line = f.read()
match1 = re.search(x + r"\s*=\s*'([^']*)'" , line, re.M|re.I).group(1)
match2 = re.search(y + r"\s*=\s*'([^']*)'" , line, re.M|re.I).group(1)
f.close()
print match1
print match2

r"\s*=\s*'([^']*)'"\s*匹配零个或多个空格,[^']*匹配任何字符,但不匹配单个引号,零次或多次。此文本(值部分)已捕获到组1中。稍后我们通过在group属性中指定索引号来引用捕获的字符。

答案 1 :(得分:0)

首先,你不要搜索参数值,而是:

match = re.search(r"^%s\s+=\s*'(.*)'" % x, line, re.M|re.I)

然后对匹配做一些事情,比如把它放回现有的变量中。

x = match.group(1)