我正在嘗試讀取日誌文件並使用正則表達式提取一些機器/設置信息。這裏是從日誌的示例:正則表達式 - 重複組
...
COMPUTER INFO:
Computer Name: TESTCMP02
Windows User Name: testUser99
Time Since Last Reboot: 405 Minutes
Processor: (2 processors) Intel(R) Xeon(R) CPU 5160 @ 3.00GHz
OS Version: 5.1 .number 2600:Service Pack 2
Memory: RAM: 48% used, 3069.6 MB total, 1567.3 MB free
ServerTimeOffSet: -146 Seconds
Use Local Time for Log: True
INITIAL SETTINGS:
Command Line: /SKIPUPDATES
Remote Online: True
INI File: c:\demoapp\system\DEMOAPP.INI
DatabaseName: testdb
SQL Server: 10.254.58.1
SQL UserName: SQLUser
ODBC Source: TestODBC
Dynamic ODBC (not defined): True
...
我想捕捉的每個數據的「塊」,使用報頭作爲一組,並且將數據作爲第二(即「COMPUTER INFO」,「計算機名:.......「)併爲每個塊重複此操作。表達式如果到目前爲止是
(?s)(\p{Lu}{1,} \p{Lu}{1,}:\r\n)(.*\r\n\r\n)
這將塊拉出到它應該的組中,這很好。但我需要讓它重複捕捉,我似乎無法得到。我試過幾個分組表達式,其中包括:
(?s)(?:(\p{Lu}{1,} \p{Lu}{1,}:\r\n)(.*\r\n\r\n))*
這似乎是正確的,但我回來很多NULL結果組與空白組項目的值。我正在使用.Net RegEx類來應用表達式,任何人都可以幫我解決這個問題嗎?
我明白這個方法,但第一個表達式並沒有返回匹配的組,我不知道爲什麼。有什麼建議麼? – Jason 2009-11-06 21:06:54
在第一種情況下,你沒有得到一個組,你只是得到一個匹配。我會在示例中添加更多代碼。 – 2009-11-06 21:20:10
我道歉。一個我用代碼做了這件事,它像一個魅力。我在Expresso中自己嘗試了這些例子。它必須是Singleline | Multiline選項,我將更詳細地探討這些選項,以便我能夠理解它們如何使表達式工作。非常感謝您的寶貴時間。 – Jason 2009-11-07 19:11:18