我想在头文件中读取并输出x = 1.0;
形式为double = x;
的每个变量
目前我已经得到了这个,只输出整行:
import re
input = open("file_with_vars.hpp", 'r')
out = open("output.txt", 'w')
for line in input:
if re.match("(.*) = (\d)", line):
print >> out, line
但我无法弄清楚如何参与该行并将变量名和双字符串输出到文件。
编辑: 所以现在我有了
for line in cell:
m = re.search('(.*)\s*=\s*(\d+\.\d+)', line)
print m.group()
但是得到错误'AttributeError:'NoneType'对象没有属性'group''
答案 0 :(得分:1)
使用search
代替match
正则表达式为.*\s*=\s*\d+\.\d+
试验:
import re
y="x=1.0"
m=re.search('(.*)\s*=\s*(\d+\.\d+)',y)
group
函数可用于将匹配的字符串提取为
>>> print m.group()
'x=1.0'
>>> print m.group(1)`
'x'
>>> print m.group(2)
'1.0'
修改
如何搜索文件中的行
for line in cell:
try:
m = re.search('(.*)\s*=\s*(\d+\.\d+)', line)
print m.group()
except AttributeError:
pass
导致NoneType
错误是因为文件中的某些行与通过None
方法返回search
的正则表达不匹配。
try except
负责处理异常。
pass
python中的null语句
表示输入文件
x=10.2
y=15.3
z=12.4
w=48
将输出创建为
x=10.2
y=15.3
z=12.4
点击此处w=48
与返回NoneType
的正则表达式不匹配,try
块安全地处理
OR
正如杰瑞指出的那样,if
可以使这更简单
for line in cell:
m = re.search('\S*\s*=\s*(\d+\.\d+)', line)
if m:
print m.group()
答案 1 :(得分:1)
您正在匹配后打印line
。如果您可以使用re.findall()
存在超过1个匹配,您还需要[\d\.]+
而不是\d
:< / p>
for line in input:
if re.match("(.*) = [\d\.]+", line):
print re.findall("(.*) = [\d\.]+", line)
以及spaces
之前和之后=
您需要确定!如果可能匹配var=num
匹配,则可以在正则表达式模式中使用?
后的空格:(.*) ?= ?[\d\.]+
答案 2 :(得分:1)
import re
input = open("file_with_vars.hpp", 'r')
out = open("output.txt", 'w')
for line in input:
if re.findall("(.*?)\s*=\s*(\d+(?:\.\d*)?)", line):
print >> out, line
试试这个。这应该有效。