我想分割输入,如下所示。此输入包含具有两个部分的数据类型。第一部分是标题,[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)\])
他们两个都有“。*”,所以他们使用了大量的回溯,有没有用[^]做什么?
...谢谢
答案 0 :(得分:0)
我认为两者都很好,并且没有必要的回溯。您可以将标题部分锚定到行的开头,但这不会产生太大的影响:
(?m)^\[(XX|YY)\]\r\n((?:(?!\r\n\r\n\[(?:XX|YY)\]).)*)
但也许你的语言已经提供了这个功能?看起来您正在尝试解析Windows样式的配置(.ini
)文件。例如,Python有ConfigParser
模块。