2016-06-25 13 views
-8

Regex für die erste Seite?
Alles auf Seitenumbruch \ f upRegex für die erste Seite

Diese findet nur die letzte Zeile der ersten Seite
„Ende der Seite einer“

Ich brauche alle 4 Zeilen
„erste Seite“
„zweite Linie "
"Suchbegriff"
"Ende der Seite ein"

Zugabe \ s hat fix es nicht für mich
[\ S | S] bläst nur durch die \ f und findet alles

string input = "first page" + Environment.NewLine + 
       "second line" + Environment.NewLine + 
       "search string" + Environment.NewLine + 
       "end of page one\f" + 
       "second page" + Environment.NewLine + 
       "second line" + Environment.NewLine + 
       "search string" + Environment.NewLine + 
       "end of page two\f"; 
public string Input { get { return input; }} 
public string FirstPage 
{ 
    get 
    { 
     //@"((.*)\f)\1(<SEARCH STRING GOES HERE>)"); this is what in the end I need to do 
     string pattern = @"(.*)\f"; 
     Match match = Regex.Match(input, pattern, RegexOptions.Multiline); 
     if (match != null) 
     { 
      return match.Value; 
     } 
     else 
      return "noot found";  
    } 
} 
+2

wo ist die Frage? – rock321987

+0

sehen? Kennzeichen.Regex für die erste Seite? – Paparazzi

+0

was ist das? Bitte stellen Sie einige Eingabe erwartet Ausgabe .. – rock321987

Antwort

3

Die . nicht Zeilenumbruch Zeichen übereinstimmen, wenn Sie die Singleline Option verwenden. Verwenden Sie einen Satz wie \W\w, um ein beliebiges Zeichen zu finden, oder ändern Sie die Option zu Singleline.

Verwenden Sie ? nach dem * Multiplikator, um es nicht gierig zu machen, sonst wird es alles zusammenpassen und dann auf die letzte zurückverfolgen.

string pattern = @"([\W\w]*?)\f"; 
Match match = Regex.Match(input, pattern, RegexOptions.Multiline); 

oder:

string pattern = @"(.*?)\f"; 
Match match = Regex.Match(input, pattern, RegexOptions.Singleline); 
+0

Zuerst funktioniert, aber nicht die zweite. Einer ist gut genug für mich. Danke – Paparazzi

+0

Ich habe nicht auf der zweiten Zeile zu einer einzigen Zeile geändert - ich bekomme es funktioniert auch. – Paparazzi

+0

@Paparazzi: Mein Schlechter, ich glaubte, dass eine einzelne Zeile die Standardoption war, aber Sie müssen die Option angeben, damit es so funktioniert. Ich habe den obigen Code korrigiert (und überprüft, dass er funktioniert). – Guffa

1

Lösung 1

Wie in Kommentar erwähnt, ich glaube, Sie Inline (?s) Modifikator oder RegexOptions.Singleline Option müssen . erlauben, neue Linien zu entsprechen.

string pattern = @"(?s)(.*?)\f"; 

Ideone Demo

oder

string pattern = @"(.*?)\f"; 
Match match = Regex.Match(input, pattern, RegexOptions.Singleline); 

Ideone Demo

HINWEIS: - Sie müssen auch Ihre regex faul mit .*?

Lösung 2

Wenn Sie möchten, machen Sie [\S\s]*? auch verwenden können, obwohl es ineffizient sein.

SIDE HINWEIS

Zeichenklasse selbst fungiert als Abwechslung für Zeichen. Die Verwendung von | wird also nicht als OR fungieren, sondern wird wörtlich mit | übereinstimmen.

+0

ALso arbeitete, aber Guffa kam zuerst und versuchte es. Danke – Paparazzi

+0

@Paparazzi niemanden zu beleidigen, aber Sie können die Zeit meines Kommentars sehen. – rock321987

+0

OK, aber ich habe den Link nicht gesehen. Ich habe gerade getestet, wie es zu mir kam. – Paparazzi

Verwandte Themen