2012-01-26 70 views
2

我想分割輸入,如下所示。該輸入包含具有兩部分的數據類型。第一部分是標題[XX]或[YY],另一部分是內容(內容可能包含\ r \ n \ r \ n或[XX]或[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 

我寫了兩個正則表達式的漁獲物和拆分此輸入:當內容完成後,新的數據與\ r \ n \ r \ n [XX]或\ r \ n \ r \ n [YY]啓動,其中兩人正在工作,但我認爲,他們可以改進。

第一:\[(XX|YY)\]\r\n((?:(?!\r\n\r\n\[(XX|YY)\]).)*)

二(做工不錯,除了最後的數據):「*」 \[(XX|YY)\]\r\n(.*?)(?=\r\n\r\n\[(XX|YY)\])

他們兩個都有,所以他們用大量的原路返回的,有沒有什麼要做到這一點與[^]?

謝謝...

+0

有時使用匹配而不是拆分更容易。正在使用拆分不可移動的要求,還是您會考慮基於匹配的方法? –

+0

我可以使用基於匹配的解決方案,我也正在使用這種模式在C#與regex.match ... – ogun

回答

0

我認爲兩者都很好,沒有任何超過必要的回溯。你可以錨標題部分線路的起點,但不應該有太大的區別:

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

可是也許你的語言已經提供了這個功能?它看起來像你試圖解析Windows風格的配置(.ini)文件。例如,Python爲此提供了ConfigParser模塊。

+0

感謝您的意見,是的,我使用C#,它提供了此功能... – ogun

+0

但我不解析。 ini或任何已知的配置文件。我想使用這種模式來解析我們的自定義日誌文件... – ogun

相關問題