Python 为行匹配正则表达式行

Python 为行匹配正则表达式行,python,regex,Python,Regex,我正在使用正则表达式匹配文件中的行,编写一种有趣的小语言。以下是我到目前为止的情况: import re code=open("code.txt", "r").read() outputf=r'output (.*)' inputf=r'(.*) = input (.*)' intf=r'int (.*) = (\d)' floatf=r'float (.*) = (\d\.\d)' outputq=re.match(outputf, code) if outputq: print

我正在使用正则表达式匹配文件中的行,编写一种有趣的小语言。以下是我到目前为止的情况:

import re

code=open("code.txt", "r").read()

outputf=r'output (.*)'
inputf=r'(.*) = input (.*)'
intf=r'int (.*) = (\d)'
floatf=r'float (.*) = (\d\.\d)'
outputq=re.match(outputf, code)
if outputq:
    print "Executing OUTPUT query"
    exec "print %s" %outputq.group(1)

inputq=re.match(inputf, code)
if inputq:
    print "Executing INPUT query"
    exec "%s=raw_input(%s)"%(inputq.group(1), inputq.group(2))

intq=re.match(intf, code)
if intq:
    exec "%s = %s"%(intq.group(1), intq.group(2))
    exec "print %s"%(intq.group(1))
else:
    print "Invalid syntax"
代码在匹配中起作用,例如:

int x = 1
但它只会匹配第一行并停止匹配,而忽略我想要匹配的其余代码。如何将文件中的每一行与我的正则表达式定义相匹配?

.read()
读取为一行,在
.read()
上使用
.split(“\n”)
,或者使用
.readlines()

然后遍历这些行并测试您的命令。 此时,您将整个代码作为一行。您要逐行检查所有行

编辑:

为此,创建一个函数

然后用readlines()读取行

最后,在行上使用函数迭代行

就像这样:

重新导入
outputf=r'输出(.*)'
inputf=r'(.*)=输入(.*'
intf=r'int(.*)=(\d)'
floatf=r'float(.*)=(\d\.\d)'
def检查管路(管路):
outputq=重新匹配(outputf,行)
如果输出Q:
打印(“执行输出查询”)
exec(“打印(%s)”%outputq.group(1))
inputq=重新匹配(inputf,行)
如果输入Q:
打印(“执行输入查询”)
exec(“%s=raw\u input(%s)”%(inputq.group(1),inputq.group(2)))
intq=重新匹配(intf,行)
如果intq:
exec(“%s=%s”%(intq.group(1),intq.group(2)))
exec(“打印(%s)”%(intq.group(1)))
其他:
打印(“无效语法”)
code=open(“code.txt”、“r”).readlines()
对于行输入代码:
检查线路(线路)
此代码仍将返回一个与问题无关的错误,请考虑是否正确分配了变量。

.read()
读取为一行,使用
.read()
上的
.split(“\n”)
或使用
.readlines()
读取

然后遍历这些行并测试您的命令。 此时,您将整个代码作为一行。您要逐行检查所有行

编辑:

为此,创建一个函数

然后用readlines()读取行

最后,在行上使用函数迭代行

就像这样:

重新导入
outputf=r'输出(.*)'
inputf=r'(.*)=输入(.*'
intf=r'int(.*)=(\d)'
floatf=r'float(.*)=(\d\.\d)'
def检查管路(管路):
outputq=重新匹配(outputf,行)
如果输出Q:
打印(“执行输出查询”)
exec(“打印(%s)”%outputq.group(1))
inputq=重新匹配(inputf,行)
如果输入Q:
打印(“执行输入查询”)
exec(“%s=raw\u input(%s)”%(inputq.group(1),inputq.group(2)))
intq=重新匹配(intf,行)
如果intq:
exec(“%s=%s”%(intq.group(1),intq.group(2)))
exec(“打印(%s)”%(intq.group(1)))
其他:
打印(“无效语法”)
code=open(“code.txt”、“r”).readlines()
对于行输入代码:
检查线路(线路)

此代码仍将返回一个错误,这与问题无关。请考虑是否正确分配了变量。

您使用的是
re.match()
,这意味着您的正则表达式必须匹配整个字符串(在本例中是整个文件)。如果迭代文件中的每一行,则
.match()
将起作用。或者,您可能希望查看
re.search()
re.findall()
和其他类似的替代方案


看起来您的代码需要在文件中的行上迭代:

您使用的是
re.match()
,这意味着您的正则表达式必须匹配整个字符串(在本例中是整个文件)。如果迭代文件中的每一行,则
.match()
将起作用。或者,您可能希望查看
re.search()
re.findall()
和其他类似的替代方案


看起来您的代码需要在文件中的行上进行迭代:

我不清楚您的问题,请尝试将重点放在解释您想要实现的目标上,而不是您试图如何实现目标上。请只发布相关代码(即,如果您遇到的问题是正则表达式匹配-只发布处理正则表达式和输入的相关行)。我也不确定您要做什么,但是如果你在使用编程语言,你可能想知道正则表达式不太适合这个词——看——你可能想考虑使用语法,或者至少看一下这个问题:你的问题我不清楚,请集中精力解释你想要达到的目标,而不是你打算怎么做。请只发布相关代码(即,如果您遇到的问题是正则表达式匹配-只发布处理正则表达式和输入的相关行)。我也不确定您要做什么,但是,如果你在使用编程语言,你可能想知道正则表达式不太适合这一点——参见——你可能想考虑使用语法,或者至少要看一看:你能通过写一个比特来帮助吗?返回返回编译(模式,标志)。匹配(字符串)类型错误:预期的字符串或缓冲区,您必须将
match()
中的“code”变量替换为line,editedLet us。您可以通过写一点来帮助我们吗?返回编译(模式、标志)。match(string)TypeError:expected string或bufferSure,您必须将
match()
中的“code”变量替换为line,editedLet us。