我正在python中编写一个编译器(用于练习语言),我希望通过空格或注释将文本拆分为标记。我尝试了/\*.*?\*/|/{2}.*?\n|\s
:fisr正则表达式模式应该以{{1}}或/** text */
的形式提出好评,可能是multyline。第二个正则表达式应该以{{1}}的形式对以新行字符结尾的注释进行细化。最后一个找到空格。
我的问题:
我检查了我的正则表达式here,它看起来很棒,但是当我打电话时
/* text */
它返回一个只包含一个元素的列表,这是我正在解析的整个文本。
关于我哪里出错的任何想法?谢谢!
谢谢!
答案 0 :(得分:3)
问题不在于正则表达式,而在于split
。您正在调用split
method of an str
,它不会被正则表达式拆分。它通过子串分割字符串。而是使用re.split
>>> code = open('file').read()
>>> code
'/* comment */\ntext1\n// comment\n\ntest2\n\ntext3 // comment\n\ntext4 /* comment */\n'
>>> import re
>>> re.split
<function split at 0x10d9c6320>
>>> re.split('/\*.*?\*/|\/{2}.*?\n|\s', code)
['', '', 'text1', '', '', 'test2', '', 'text3', '', '', 'text4', '', '', '']