2017-07-19 4 views
0

Ich versuche, jedes Wort in einem TXT-Dokument zu erfassen.Problem mit diesem regulären Ausdruck in C# mit Apostroph

Wörter sind definiert als jede Folge von ununterbrochenen Zeichen und Bindestrichen, die einen Apostroph haben können (sowohl Apostroph als auch "RECHTE EINZELZITATIONSMARK" Zeichen werden erfasst, weil die Eingabe eines der Zeichen verwenden kann) oder, als regulärer Ausdruck:

[a-zA-Z\-]+['a-zA-Z\-\’\']* 

Nun scheint dies in mehrere Online-Regex Testen von Web-App thingos zu arbeiten, aber es scheint nicht nur in meiner C# -Code arbeiten zu wollen, und ich verstehe nicht, warum:

MatchCollection matches = Regex.Matches(input_String.ToLowerInvariant(), 
             @"[a-zA-Z\-]+['a-zA-Z\-\’\']*"); 
string[] sorting_String = matches.Cast<Match>().Select(match => match.Value).ToArray(); 

Wenn ein wo Rd wie "Ich bin" ist in dem Text enthalten, es gibt "i" und "m" als separate Wörter zurück, anstatt den beabsichtigten einzelnen Eintrag "ich bin".

Ich habe dieses Mal nichts vom googlen gefunden, und da es wie beabsichtigt in den Online-Testern funktioniert ... und ich kann nicht herausfinden, ob es ein Escape-Problem ist ... Ich bin ratlos.

Könnte mir jemand erklären, warum es nicht zurückgibt, was ich in C# erwarte? Oder zumindest mit der Bibliothek System.Text.RegularExpressions? Ich nehme an, ich bin nur dumm/ignorant.

EDIT 1: Hier ist ein Screenshot von den Einheimischen das Problem zeigt - Image of Locals Es sollte „Buch“ sein. Huh, ich meine Eingabe String-Variable nur geprüft, und es sieht aus wie ich Sachen wie diese bekommen: Image of encoding issue? maybe?

Ehhhh, ist die Eingabe eine .txt-Datei - und es wird die Formatierung in der Datei beibehalten ... so In meinem Code passiert etwas, das nicht gut spielt ... ähm, zumindest denke ich, dass das Problem jetzt ist ... Ich bin kein Experte in diesem XD. Es tut mir leid, ein Ärger zu sein, aber könnte ich in Richtung der Ressourcen zeigen, die mir dabei helfen könnten?

+2

Versuchen Sie, '" @ "' zu entfernen. –

+1

[Ich kann das Problem nicht reproduzieren] (http://ideone.com/dSDvY4). Ein besseres Muster könnte auch sein: [a-zA-Z] + (?: ['' -] [a-zA-Z] +) * 'oder sogar' \ p {L} + (?: ['' -] \ p {L} +) * '. –

+0

@ MichałTurczyn mein erster Gedanke auch, aber ohne das @ es ist nicht einmal ein legales String-Literal. Das @ ist hier richtig. –

Antwort

1

Sie können diese [\w\'\-]+[\w\'\-]* versuchen und sehen, ob es

Ich denke, arbeitet sollten Sie die erste ' auf der zweiten Klammer zu entkommen.