0

我正在用 python 编写一个编译器(用于练习语言),我想通过空格或注释将我的文本拆分为标记。我试过/\*.*?\*/|/{2}.*?\n|\s:fisr 正则表达式模式应该以/** text */or的形式进行精细注释/* text */,可能是多行。第二个正则表达式应该以// text换行符结尾的形式对注释进行细化。最后一个找到空白。

我的问题:

在这里检查了我的正则表达式,看起来很棒,但是当我打电话时

temp = file.read()

temp = temp.split('/\*.*?\*/|\/{2}.*?\n|\s',flags=DOTALL)

print temp 

它返回一个只有一个元素的列表,这是我正在解析的整个文本。

关于我哪里出错的任何想法?谢谢!

谢谢!

4

1 回答 1

3

问题不在于正则表达式,而在于split. 您正在调用splitan 的方法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', '', '', '']

有关 python re 模块的更多信息

于 2012-05-29T08:26:02.087 回答