首页 > 解决方案 > 如何使用 python re 来描述这个?

问题描述

我创建了深奥的编程语言,我想实现这种结构来打印文本:

   !(some-text)

此结构必须在括号中写入文本并以)结尾。

但是由于某种原因,这种结构只有在找到换行符时才会结束。我认为它的发生是因为点匹配除\n之外的任何符号。我尝试使用(?!...)创建条件,但这也不起作用。最终我不知道如何匹配没有\n)的所有符号。

下面我附上了令牌表的完整代码,以便您发现其中的错误并建议修复它们的方法。提前感谢您的帮助!

token_table = [
(r'[ \t\n]+', None),
(r'!\((?!\)).*\)', 'PRINTSTR'), # This is not working
(r'[-]?[0-9]+', 'INT'),
(r'(?!!|\?|\(|\)|:|<|>|\+).*', None),
(r'!', 'PASS'),
(r'\?', 'IF'),
(r'\(', 'LPAR'),
(r'\)', 'RPAR'),
(r'>', 'INPUT'),
(r'<', 'PRINT'),
(r':', 'GOTO'),
(r'\+', 'ADD'), ]

标签: pythonmatchingre

解决方案


不要使用., 用于[^)]匹配 . 以外的任何字符)。这将包括换行符。

(r'!\([^)]*\)', 'PRINTSTR')

推荐阅读