2016-06-22 14 views
2

Versucht, das Apostroph in einer Zeichenfolge zu entfernen. Mit dem folgenden Code habe ich den Apostroph und die Leerzeichen entfernt. Kann mir jemand helfen, das Problem zu lösen, damit ich nur das Apostroph lösche?gsub! clean string, Apostroph wegnehmen

def clean_uniname(text) 
return text.gsub!(/\s|"|'/, '') 
end 
+1

Apostrophe und einfache Anführungszeichen verwenden das gleiche Symbol, haben jedoch unterschiedliche Bedeutungen. Angenommen, deine Saite wäre "Sie sagte:, Ich weiß es nicht '". Willst du bekommen? "" Sie sagte:, Ich weiß nicht '"(nur Apostroph entfernen) oder" Sie sagte, ich weiß es nicht "(Entfernen des Symbols" "") oder etwas anderes? Wenn es ersteres ist, ist es ein bisschen schwierig, weil einige Wörter einen Apostroph hinter dem letzten Zeichen haben ("bro", oder die Possessivform für Wörter, die mit einem "s" enden, wie "Chris" Auto) und einige Wörter haben mehrere Apostrophe ("könnte nicht"). –

Antwort

3

\s bedeutet "Leerzeichen" und " stellt ein Angebot. Wenn Sie diese in Ihrem regulären Ausdruck nicht möchten, ziehen Sie sie. Für die Debugging-Hilfe versuchen Sie Rubular zum Testen.

Dies bedeutet, dass Ihr Code sein sollte:

def clean_uniname(text) 
    text.gsub!(/\s|"|'/, '') 

    text 
end 

Es ist erwähnenswert, dass gsub! kehrt nil, wenn keine Änderungen so eine explizite Rückkehr von text gemacht worden sind, ist hier erforderlich, wenn Sie den Rückgabewert verwenden.

3

Dies sollte den Trick:

def clean_uniname(text) 
    text.gsub!("'", '') 
    end 
+0

versuchte es und ich diese Fehlermeldung empfangen: testing.rb: 41: in 'Block in process_unis ': nicht definierte Methode' []' für nil: NilClass (NoMethodError) – Akamaru

+0

Dieser Fehler nicht verwandt ist man auf die Frage, wie Sie erwähnt kann folgendes sehen: 2.2.1: 001> string = "Ich bin ein String" => "Ich bin ein String" 2.2.1: 002> string.gsub! ("'",' ') = > "Im String" 2.2.1: 003> Wenn Sie mehr Code schreiben, kann ich Ihnen bei dem anderen Problem helfen, aber Sie können besser ein neues Problem öffnen und meine Antwort für dieses Problem markieren, da meine Antwort die Frage löst du hast gefragt. –