在Python中参与正则表达式搜索结果

时间:2014-10-27 15:49:00

标签: python regex

我想在头文件中读取并输出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''

3 个答案:

答案 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

试试这个。这应该有效。