2017-02-08 4 views
0

Ich versuche, Dateinamen in einer Zeichenfolge zu finden, kann ich nicht vorhersagen, ob die Namen jedes Trennzeichen um sie haben, können die Namen beliebiger Länge sein und Leerzeichen enthalten, aber sie beginnen mit eine Zahl und endet mit einem Dateityp.Regex, um mehrere Dateinamen in Textzeichenfolge zu finden

Zum Beispiel im String 'Arbeitsplan 2. März deadline.doc (0399 F_1221A.pdf) gerecht zu werden' I 2. März deadline.doc und 0399 F_1221A.pdf

Die Regex ich /\d{1,4} .*(\.docx|\.doc|\.ppt|xls|\.pdf)/gi bin mit übereinstimmen soll ist ein einziges Spiel '2. März deadline.doc (0399 F_1221A.pdf'

Siehe https://regex101.com/r/yUkABU/3

Rückkehr Was mache ich falsch?

+0

@MymsMan, können Sie bitte einige weitere Proben befestigen und was meinen Sie mit * ist ein Einzelspiel Rückkehr *? – ffledgling

Antwort

3

Verwenden Sie einen faulen q statt eines gierigen: statt .*.*?.

Siehe http://www.regular-expressions.info/repeat.html#lazy

+1

* den nützlichen Teil meiner Antwort in einen Kommentar zu deiner Antwort umwandeln, wenn es dir nichts ausmacht. * Hier ist eine Demo, die eine Abzweigung von OPs verwendet: regex101 link: https://regex101.com/r/cCwAyl/1 –

+0

@JosephMarikle Danke für das Beispiel :) – sp00m

+0

Danke, dass scheint den Trick schön zu tun – MymsMan

1

alles Passende Versuchen mit Ausnahme für einen Zeitraum

\d{1,4} [^\.]*(\.docx|\.doc|\.ppt|xls|\.pdf) 
//  ^^ this part 

-Test here

+0

Das funktioniert für das Beispiel gezeigt, aber ich vermute, andere Dateinamen können eingebettete Punkte enthalten, so dass ich die andere Lösung verwenden werde – MymsMan

Verwandte Themen