2016-07-27 12 views
0

Ich habe eine Frage, müssen einen Wert vor einer definierten Zeichenfolge extrahieren, aber ich kann nicht, zum Beispiel den Wert "Pudahuel" extrahieren, dieses Wort (Dynamic) Es ist vor der Wort "Horario", irgendwelche Vorschläge?extrahieren Wert vor einem String Regex

Orden de Trabajo 
                  N° 0200087663 


                   Pudahuel Horario Atención: LU a VI de 08:30 a 13:00 y 14:30 a 19:00 
Datos de Recepción: 

Beispiel Link: https://regex101.com/r/zN2vG6/29

Antwort

1

Ihre (.*)(?=Horario) Streichhölzer 0+ verkohlt andere als eine neue Zeile vor einem Horario Text (weil Sie nicht den DOTALL Modifikator verwendet haben). Beachten Sie, dass zwischen den Wörtern, die Sie benötigen, ein Zeilenumbruch besteht.

Verwenden Sie die folgende regex

(\w+)\s*Horario 

Siehe regex demo

Der Wert, den Sie in der Gruppe werden müssen 1. Statt \w+ (eine oder mehrere Wort Zeichen, die aus [a-zA-Z0-9_] Bereich) können Sie verwenden [a-zA-Z]+ oder sogar \p{L}+ (alle 1 + Buchstaben).

HINWEIS: Wenn Sie Unicode-Zeichen in den Rüttler/string haben, müssen Sie den /u Modifikator verwenden:

/(\w+)\s*Horario/u 

oder your suggested pattern (ein Bit erweitert):

/N°\s+(\S+)/u 
      ^
+0

bro du rockst !!!!!!!! Danke, und wenn der Wert "LA SERENA" anstelle von "PUDAHUEL" ist (weil der Text dynamisch ist), irgendeine Idee? : 'v –

+0

Es hängt von den Kriterien ab. Wenn Sie einen Teil der durch Leerzeichen getrennten ALLCAPS-Wörter vor 'Horario' abgleichen wollen, verwenden Sie [' \ b ([AZ] + (?: \ S + [AZ] +)) \ s * Horario '] (https: // regex101 .com/r/tO5yV1/2). –

+0

Oder, wenn Sie die gesamte Zeichenfolge frei von den anfänglichen Leerzeichen vor einem 'Horario'-Wort, das am Anfang der nächsten Zeile erscheint, verwenden müssen, verwenden Sie [' /^\h*(.*)\R+Horario/m '] (https://regex101.com/r/tO5yV1/3). –

0

Ihre Anfangszeichenfolge könnte vertikale/horizontale Registerkarten enthalten, verwenden Sie den folgenden Regexp:

(\b[\w ]*?)[\v\h]?(?=Horario) 

DEMO link

+0

Danke !!, jetzt habe ich ein Problem mit dem ordinalen Zeichen (°), weil der Wert extrahiert werden muss (0200087663, die Zahl ist dynamisch), aber der Cron erkennt das Zeichen (°) nicht, irgendeine Idee? –

+1

Dies ist ein Fall, in dem man wirklich keinen Lookaround verwenden muss. –

Verwandte Themen