2008-12-03 4 views
2

J'ai texte sous une forme deexpression Regex à chaîne divisée en articles

[1/12/2008 2:32:11 p.m. - name] 
line 1 
[1/12/2008 2:36:00 p.m. - name] - PRIVATE 
line 2 [some text] sd 
[1/12/2008 2:36:00 p.m. - name] 
line 3 

que je veux diviser en éléments pour que j'ai accès au temps, le nom et le texte de chaque élément,

e.g.: 
(item 1) 
    1: 1/12/2008 2:32:11 p.m. 
    2: name 
    3: line 1 
(item 2) 
    1: 1/12/2008 2:36:00 p.m. 
    2: name 
    3: - PRIVATE 
    line 2 [some text] sd 
(item 3) 
    1: 1/12/2008 2:36:00 p.m. 
    2: name 
    3: line 3 

je tentais de trouver un seul modèle de regex pour y parvenir, mais pas de chance:

\[([0-9\/ \:\.apm]+?) - ([a-z_\-0-9]+?)\](.*?\r\n.+?)(?:\[[0-9\/ \:\.apm]+? - [a-z_\-0-9]+?\]) 

ce modèle ci-dessus sur retourne le premier élément.

\[([0-9\/ \:\.apm]+?) - ([a-z_\-0-9]+?)\](.*?\r\n.+?)(?!\[[0-9\/ \:\.apm]+? - [a-z_\-0-9]+?\]) 

Le schéma ci-dessus renvoie tous les éléments, mais seulement le premier caractère du texte (groupe 3)

Toutes les suggestions?

Répondre

4

Il semble que cela vous donne ce que vous voulez.

\[([0-9\/ \:\.apm]+?) - ([a-z_\-0-9]+?)\](.*?\r\n.+.*?) 

Je l'ai testé sur my RegEx tester et il semble obtenir le bon format.

+0

Merci, j'ai essayé votre exemple et je n'a pas fonctionné au départ. Puis il s'est avéré que l'option regex "single line" l'empêchait de fonctionner. Supprimer l'option "single line" l'a résolu. – Muxa

+0

Merci pour le lien vers le testeur regex en ligne 1+ – CheGueVerra

+0

@CheGueVerra - Pas de problème! J'espère également sortir une nouvelle version dans les prochains jours, car il y a un "bug" dans la façon dont cela rend les correspondances HTML/XML. –

Questions connexes