Python中的多个正则表

时间:2017-02-10 01:07:54

标签: python regex

我正在创建一种编程语言。对于这种语言,我正在创建一个将其编译为Python的程序。我不需要词法分析器,因为大多数语法都可以用正则表达式转换为Python。

这是我到目前为止所拥有的:

import re

infile = input()

output = open(infile + ".py","w")
input = open(infile + ".hlx")
# I'm aware the .hlx extension is already taken, but it doesn't really matter.

for line in input:
    output.write(re.sub(r'function (\S+) (\S+) =', r'def \1(\2):', line))

for line in input:
    output.write(re.sub(r'print(.+)', r'print(\1)', line))

for line in input:
    output.write(re.sub(r'call (\S+) (\S+)', r'\1(\2)', line))

# More regexes go here, eventually.

input.close()
output.close()

我必须将每个正则表达式放在一个单独的for语句中,因为如果我将它们放在一起,它将替换每一行3次。

这里的问题是它只执行一个正则表达式,这是第一个。这里的顺序并不重要,但我仍然需要该程序来执行所有的正则表达式。我该怎么做?

顺便说一句,这是我想用我的语言替换的代码:

function hello input =
    print "Hello, ", input, "!"
hello "world"

这是我想在Python中替换它的代码:

def hello(input):
    print("Hello, " + input + "!")
hello("world")

1 个答案:

答案 0 :(得分:1)

在一个循环中一个接一个地执行一个所有替换。我还建议在一个单独的数据结构中使用正则表达式及其替换,这将使得进一步扩展更容易:

conversions = (
  (r'function (\S+) (\S+) =', r'def \1(\2):'),
  (r'print(.+)',              r'print(\1)'  ),
  (r'call (\S+) (\S+)',       r'\1(\2)'     ),
)

for line in input:
    for (pattern, sub) in conversions:
        line = re.sub(pattern, sub, line)
    output.write(line)