2017-12-15 1 views
0

Ich habe die folgende Zeichenfolge zu halten:Benötigen Sie Vorschläge, wie regex zu modifizieren, um die erste Ziffer in einer Capture-Gruppe

3> General Information  34> 3rd Party Software 

Aus dieser Saite I 2 Matches mit 2 Gruppen in jedem von ihnen bekommen muß.
Mit dieser regex ([^\s\.\)\d\-,\>](\s{0,3}[^\s]+)*) ich folgendes Ergebnis erhalten:

Match 1 
Full match 6-25 'General Information' 
Group 1. 6-25 'General Information' 
Group 2. 13-25 ' Information' 
Match 2 
Full match 39-56 'rd Party Software' 
Group 1. 39-56 'rd Party Software' 
Group 2. 47-56 ' Software` 

Hier ist der Link zu my regex demo fiddle.

Allerdings fehlt mir eine Nummer 3 in meinem zweiten Spiel. Statt '3rd Party Software' bekomme ich 'rd Party Software'. Irgendwelche Vorschläge, wie man diese Ziffer behält?

Danke.

+0

der 3 wird, weil 'nicht erfasst [^ \ s \ \) \ d. \ - \ >]' schließt '\ d' (Dezimalziffer). Ich glaube nicht, dass dieser Regex das tut, was er zu tun glaubt. Wenn beispielsweise das "G" in "Allgemein" ein Kleinbuchstabe "g" wäre, würde es ausgeschlossen, da der zuvor referenzierte Zeichensatz auch "g" ausschließt. Es schließt einzelne Zeichen aus, nicht eine Folge von Zeichen. – Galen

+0

Was genau ist das Ergebnis, das Sie für Ihre Matches & Capture-Gruppen wünschen? – Marathon55

+0

@kfed macht diese Arbeit für Sie: '[\ w \ s] + (= \ s {6} | \ r * \ n?)' (<= \ D > \ s?)? – wp78de

Antwort

0

Wenn Sie [^&gt;] Sie irgendein Zeichen passen, aber &, g, t und ; als [^...] ist eine negierte Zeichenklasse Konstrukt.

Sie können die Ziffer entsprechen (n) und die &gt; Teil und dann passen und Capture, was Sie brauchen:

/\d+&gt;\s*([^\s.),-]+\s{0,3}((?:\s{0,3}\S+)*))/ 

Siehe regex demo

Einzelheiten

  • \d+ - 1+ Ziffern
  • &gt; - eine Teil
  • \s* - 0+ Leerzeichen Zeichen
  • ([^\s.),-]+\s{0,3}((?:\s{0,3}\S+)*)) - Gruppe 1:
    • [^\s.),-]+ - jede char sondern ein Leerzeichen, ., ), , und -
    • \s{0,3} - 0 3 Vorkommen von Whitespace-Zeichen
    • ((?:\s{0,3}\S+)*) - Gruppe 2, die 0 oder mehr aufeinanderfolgende occ urrences von
      • \s{0,3} - 0 bis 3 Vorkommen von Leerzeichen Zeichen
      • \S+ - 1+ Zeichen kein Leerzeichen ist.
Verwandte Themen