有没有其他方式可以预见?

时间:2012-01-26 13:06:13

标签: regex

我想分割输入,如下所示。此输入包含具有两个部分的数据类型。第一部分是标题,[XX]或[YY],另一部分是内容(内容可能包含\ r \ n \ r \ n或[XX]或[YY])。内容完成后,新数据以\ r \ n \ r \ n [XX]或\ r \ n \ r \ n [YY]开头:

[XX]\r\n
bla bla\r\n
bla bla\r\n
\r\n
[YY]\r\n
bla [XX] bla\r\n
bla bla\r\n
\r\n
[YY]\r\n
bla [YY] bla\r\n\r\n
bla bla\r\n
\r\n

我为catch编写了两个正则表达式并将这个输入分开,其中两个正在工作,但我认为,它们可以得到改进。

首先:\[(XX|YY)\]\r\n((?:(?!\r\n\r\n\[(XX|YY)\]).)*)

第二个(除最后一个数据外,效果很好):\[(XX|YY)\]\r\n(.*?)(?=\r\n\r\n\[(XX|YY)\])

他们两个都有“。*”,所以他们使用了大量的回溯,有没有用[^]做什么?

...谢谢

1 个答案:

答案 0 :(得分:0)

我认为两者都很好,并且没有必要的回溯。您可以将标题部分锚定到行的开头,但这不会产生太大的影响:

(?m)^\[(XX|YY)\]\r\n((?:(?!\r\n\r\n\[(?:XX|YY)\]).)*)

但也许你的语言已经提供了这个功能?看起来您正在尝试解析Windows样式的配置(.ini)文件。例如,Python有ConfigParser模块。