Wie passen Sie zu mit und tilde-Zeichen in einem regulären perl-Ausdruck (regexp)?
Nutzer eine Reihe von Namen mit Akzenten und Tilden:
Renato Núñez, David DeJesús, and Edwin Encarnación
Meine Datenbank hat anglisierte Namen für diese Menschen
@names = ('Renato Nunez','David DeJesus','Edwin Encarnacion');
Wünsche ich zu tun, ein regexp-match auf diesen Namen.
$string = "Renato Núñez, David DeJesús, and Edwin Encarnación";
foreach my $name (@names) {
print "found:$name\n" if ($name =~ /$string/);
}
Als aktuell präsentiert, bekomme ich keine Treffer.
Ich habe versucht, aber es hat nicht funktioniert.
$string = "Renato Núñez, David DeJesús, and Edwin Encarnación";
foreach my $name (@names) {
$name =~ s|a|[áa]|;
$name =~ s|e|[ée]|;
$name =~ s|i|[íi]|;
$name =~ s|o|[óo]|;
$name =~ s|u|[úu]|;
$name =~ s|n|[ñn]|;
# Originally: print "found:$name\n" if ($name =~ /$string/);
# Corrected to:
print "found:$name\n" if ($string =~ /$name/);
}
EDIT: sorry, ich hatte $name und $string Umgekehrt in der letzten Zeile.
Irgendwelche Vorschläge?
Vorschlag 1: Operatoren für Reguläre Ausdrücke in perldoc perlop. Ich denke, Sie wollen sagen
ich habe die s||| Bestellung die Art, wie ich tun, weil ich bauen will ein regex, der aus der Zeichenfolge "David DeJesus" zu entsprechen, wird der name mit oder ohne Akzent.
Oh, jetzt sehe ich. Sie versuchen, erstellen Sie einen regulären Ausdruck in
schauen Sie sich den code habe ich soeben auf meine Antwort zu zeigen, wie Sie entsprechen, Zeichenfolgen, die möglicherweise Akzente in Sie, ohne darum zu sorgen, ob Sie es tun oder nicht.
$string =~ /$name/
statt $name =~ /$string/
, und s|[áa]|a|
statt s|a|[áa]|
.ich habe die s||| Bestellung die Art, wie ich tun, weil ich bauen will ein regex, der aus der Zeichenfolge "David DeJesus" zu entsprechen, wird der name mit oder ohne Akzent.
Oh, jetzt sehe ich. Sie versuchen, erstellen Sie einen regulären Ausdruck in
$name
, nicht zu Streifen aus dem un-anglisierte Zeichen.schauen Sie sich den code habe ich soeben auf meine Antwort zu zeigen, wie Sie entsprechen, Zeichenfolgen, die möglicherweise Akzente in Sie, ohne darum zu sorgen, ob Sie es tun oder nicht.
InformationsquelleAutor Sean | 2011-03-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist jedoch fast immer die falsche(est), was zu tun. Was werden Sie tun, über
Ævar Arnfjörð
Dženan Ljubović
King Henry Ⅷ
Carlos Ⅴº, el Emperador
Nur umarmen Unicode. Die richtige Art und Weise zu entsprechen, Dinge, die mit oder ohne diakritische Zeichen wird zum instanziieren einer
Unicode::Collator
Objekt mit der Kraft, die auf ignorieren gesetzt, die diakritische Zeichen enthalten. Dann rufen Sie einfach diecmp
odereq
Methoden.BEARBEITEN
Diese ist, wie Sie gehen sollten über diese Dinge. Zeuge:
Und hier ist der code, der generiert.
InformationsquelleAutor tchrist
Googeln, ich sehe das problem ist Recht Häufig (ich habe die Abfrage "perl entfernen Sie diakritische Zeichen"). Denken Sie daran, dass es nicht eine "exakte" Wissenschaft (entfernen von diakritischen Zeichen und anglicizing text). Hier gibt es einige links:
http://www.ahinea.com/en/tech/accented-translate.html
http://search.cpan.org/~wollmers/Text-Undiacritic-0.02/lib/Text/Undiacritic.pm
http://search.cpan.org/~ldachary/Text-Unaccent-1.08/Unaccent.pm
Als Anregung, für eine quick-n-dirty-Methode:
\p{M}
(es finden alle Marken)Kann ich dir nicht helfen mehr, weil es viele Jahre habe ich nicht das Programm in Perl.
InformationsquelleAutor xanatos
Scheint es, dass Sie die swap-parameter.
Sie geben
Versuchen pattern ersetzen "a" durch "[µa]"
Versuchen
Swap-match und es wird funktionieren.
http://www.regular-expressions.info/unicode.html
InformationsquelleAutor VGE
Ich glauben, dass Sie als regexp den string "Renato Núñez, David DeJesús, und Edwin Encarnación"
Wenn ich das richtig verstehe, sind Sie versucht, jeden von den Namen in der phrase "Renato Núñez, David DeJesús, und Edwin Encarnación".
Wenn das der Fall ist, dann müssen Sie schreiben:
$string =~ /$name/ instead of $name =~ /$string/
InformationsquelleAutor mpcoder
Könnte dies mehr im Einklang mit dem, was Sie zu tun versuchen.
sich
found: Renato Nunez ~ Renato Núñez
found: David DeJesus ~ David DeJesús
found: Edwin Encarnacion ~ Edwin Encarnación
InformationsquelleAutor sln