Extrahieren Sie 2 Zahlen von zwei verschiedenen Strings aus Absatz voran mit Tcl Regular Expression

stimmen
0

Ich brauche zwei verschiedene Zahlen von zwei verschiedenen Strings voran zu extrahieren. Employee Id--> Employee16(Ich brauche 16) und Employee links--> Employee links:2(Ich brauche 2). Quelle String sieht wie folgt aus :

Employee16, Employee name is QueenRose
  Working for 46w0d
  Billing is Distributed
  65537 assigned tasks, 0 reordered, 0 unassigned
  0 discarded, 0 lost received, 5/255 load
  received sequence unavailable, 0xC2E7 sent sequence
  Employee links: 2 active, 0 inactive (max not set, min not set)
    Dt3/5/10:0, since 46w0d, no tasks pending
    Dt3/5/10:10, since 21w0d, no tasks rcvd
 Employee is currently working in Hardware section.

Employee19, Employee name is Edward11
  Working  for 48w4d
  Billing is Distributed
  206801498 assigned tasks, 0 reordered, 0 unassigned
  655372 discarded, 0 lost received, 9/255 load
  received sequence unavailable, 0x23CA sent sequence
  Employee links: 7 active, 0 inactive (max not set, min not set)
    Dt3/5/10:0, since 47w2d, tasks pending
    Dt3/5/10:10, since 28w6d, no tasks pending
    Dt3/5/10:11, since 18w4d, no tasks pending
    Dt3/5/10:12, since 18w4d, no tasks pending
    Dt3/5/10:13, since 18w4d, no tasks pending
    Dt3/5/10:14, since 18w4d, no tasks pending
    Dt3/5/10:15, since 7w2d, no tasks pending
   Employee is currently working in Hardware sectione.

Employee6 (inactive)
  Employee links: 2
    Dt3/5/10:0 (inactive)
    Dt3/5/10:10 (inactive)

Employee7 (inactive)
  Employee links: 2
    Dt3/5/10:0 (inactive)
    Dt3/5/10:10 (inactive)

Versucht mit den folgenden:

Employee(\d+)[^\n\r]*[^M]*Employee links:\s+(\d+)

Erwartet ausgegeben werden wie:

16  2
19  7
 6  2
 7  2

Aber ist die Auflistung nicht alle Ids und Links. Kann mir jemand helfen, diese zu bekommen?

Veröffentlicht am 07/05/2010 um 09:53
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

Es ist am einfachsten aus den zwei verschiedenen Orten als zwei getrennte Anpassungsschritte zu extrahieren. Es ist auch bei weitem am einfachsten , wenn Sie den ganzen Text aufgeteilt zunächst in Absätze nach oben.

Employee Id--> Employee16 (Ich brauche 16)

Ich würde ein einzelnen wie folgt extrahieren:

regexp -line {^Employee(\d+),} $paragraph -> employeeNumber

(Sie wollen Leitungsanpassungsmodus für diese Aufgabe, anstatt der Standard „ganze Reihe“ Matching-Modus.)

Employee links--> Employee links:2 (Ich brauche 2)

Für diesen, unter der Annahme, schon wieder, dass wir in der Gesamtbilanz für einen einzelnen Mitarbeiter nur freuen:

regexp -line {^\s+Employee links:\s*(\d+)(.*)$} $paragraph -> links rest

In diesem Fall habe ich nicht nur die extrahierte , $linkssondern auch die $restder Linie, da scheint es , dass Sie darüber nachdenken , müssen möglicherweise in der Lage sein , ob es ankommt. Es könnte natürlich sein , dass die folgenden noch nützlicher ist:

regexp -line {^\s+Employee links:\s*(\d+)(?:\s+active,\s+(\d+)\s+inactive)?} \
        $paragraph -> activeLinks inactiveLinks

In diesem Fall wird die $inactiveLinkseine leere Zeichenfolge haben, wenn nur die erste Zahl vorhanden war (was wenn zu geschehen scheint der Mitarbeiter nicht aktiv ist, müssen Sie eine triviale wenig Logik tun in diesem Fall aufzuräumen).

Wenn schließlich mit regexp, vergessen Sie nicht , das Ergebnis zu überprüfen , um zu sehen , ob es angepasst!
Hoffe das hilft.

Beantwortet am 07/05/2010 um 10:18
quelle vom benutzer

stimmen
0

Ich wollte eine vollständige Antwort geben, aber dann las ich Donal viel hilfreicher Tutorial und fühlte ich konnte einfach nicht. Ich werde zeigen, wie Sie den Text teilen, obwohl in Absätze nach oben:

foreach paragraph [regexp -all -inline {.*?\n{2,}} $text] {
    do something with $paragraph
}

In Ihrem Versuch, sehe ich [^\n\r]*- sind Sie sicher , dass Sie Zeilenumbrüche in Ihrem Text sowie Zeilenumbrüche haben?

Beantwortet am 07/05/2010 um 11:55
quelle vom benutzer

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more