J'essaie de lire un fichier journal et d'extraire des informations sur les machines/paramètres en utilisant des expressions régulières. Voici un exemple du journal:Expression régulière - Répétition de groupes
...
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
...
Je voudrais saisir chaque « bloc » des données, en utilisant l'en-tête en tant que groupe, et les données en tant que seconde (ie « INFO INFORMATIQUE », « Nom de l'ordinateur : ....... ") et répétez ceci pour chaque bloc. L'expression "si" a été jusqu'à présent
(?s)(\p{Lu}{1,} \p{Lu}{1,}:\r\n)(.*\r\n\r\n)
Ceci retire le bloc dans les groupes comme il se doit, ce qui est génial. Mais j'ai besoin de répéter la capture, ce que je n'arrive pas à obtenir. J'ai essayé plusieurs expressions de regroupement, y compris:
(?s)(?:(\p{Lu}{1,} \p{Lu}{1,}:\r\n)(.*\r\n\r\n))*
qui semble être correct, mais je reviens beaucoup de groupes de résultats NULL avec les valeurs des éléments du groupe vide. J'utilise la classe .Net RegEx pour appliquer les expressions, quelqu'un peut-il m'aider ici?
Je comprends l'approche, mais les premières expressions ne retournent pas les groupes correspondants, et je ne sais pas pourquoi. Aucune suggestion? – Jason
Dans le premier cas, vous n'obtenez pas de groupe, vous obtenez juste une correspondance. Je vais ajouter plus de code à l'exemple. –
Je m'excuse. Un que j'ai fait ceci dans le code, cela a fonctionné comme un charme. J'essayais les exemples par eux-mêmes dans Expresso. Ce doit être les options Singleline | Multiline, que je devrai explorer plus en détail pour que je puisse comprendre comment elles fonctionnent. Merci beaucoup pour votre temps. – Jason