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)'
------------------------------------
~
任何人都可以帮我实现上述目标。
答案 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)