这是一个最小的测试用例-
>>>import re
>>>re.findall('(\w+\n?) ([^(!END)]+) (!END\n?)',"!MDCNTL\n !GENERIC LUNIT=7.9406324338 LONGRANGE=F TRACE=F SCALE=1.0 !END\n !RDYN DT=5. FRIC=0.001 NSTEP=20000 !END\n !LATTICE t= 0.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 0.0 !END\n !END")
[('LATTICE', 't= 0.0 1.0 1.0 1.0 0.0 1.0 1.0 1.0 0.0', '!END\n')]
让我解释一下与xml非常相似的标记。
1.!TAG
和!END
对应于xml中的<tag>
和</tag>
2.键值对是key=value
3.值中允许空格
正则表达式应该挑选出最低级别的标记或叶子。我不明白为什么在这个特定的例子中只返回一片叶子。我构造的其他类似示例给出了预期的结果
使用
re.DOTALL
标志使.
也匹配换行符为什么问题中的正则表达式不起作用
[^(!END)]
匹配不在(
、!
、E
、N
、D
、)
中的字符([^.....]
:负字符集)在
GENERIC
标签的属性中有E
/N
,RDYN
标签;这些阻碍了比赛相关问题 更多 >
编程相关推荐