Ich versuche, eine Protokolldatei zu lesen und einige Maschinen-/Einstellungsinformationen mithilfe von regulären Ausdrücken zu extrahieren. Hier ist ein Beispiel aus dem Protokoll:Regulärer Ausdruck - Wiederholungsgruppen
...
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
...
Ich mag jeden ‚Block‘ erfassen von Daten, die Kopfzeile als eine Gruppe verwendet wird, und die Daten als zweite (dh „COMPUTER INFO“, „Computername : ....... ") und wiederhole das für jeden Block. Der Ausdruck, wenn so weit hat, ist
(?s)(\p{Lu}{1,} \p{Lu}{1,}:\r\n)(.*\r\n\r\n)
Dieser den Block in die Gruppen, wie es sollte herauszieht, das ist toll. Aber ich muss es die Aufnahme wiederholen, die ich nicht zu bekommen scheinen. Ich habe mehrere Gruppierungsausdrücke ausprobiert, darunter:
(?s)(?:(\p{Lu}{1,} \p{Lu}{1,}:\r\n)(.*\r\n\r\n))*
, die korrekt zu sein scheint, aber ich wieder viele NULL-Ergebnis Gruppen mit leeren Gruppenelementwerte. Ich verwende die .NET RegEx-Klasse, um die Ausdrücke anzuwenden. Kann mir hier jemand helfen?
Ich verstehe den Ansatz, aber die ersten Ausdrücke gibt keine übereinstimmenden Gruppen zurück, und ich weiß nicht warum. Irgendwelche Vorschläge? – Jason
Im ersten Fall bekommst du keine Gruppe, du erhältst nur eine Übereinstimmung. Ich füge mehr Code zu dem Beispiel hinzu. –
Ich entschuldige mich. Eine, die ich im Code gemacht habe, funktionierte wie ein Zauber. Ich habe die Beispiele in Expresso selbst getestet. Es müssen die Singleline | Multiline-Optionen sein, die ich genauer untersuchen muss, damit ich verstehen kann, wie sie die Ausdrücke funktionieren lassen. Vielen Dank für Ihre Zeit. – Jason