Suchen einer Einfügung in einer Zeichenfolge

8

Wie überprüft man am besten, ob StringA = StringB mit einem anderen StringC an einem beliebigen Punkt eingefügt wurde?

Wenn Sie beispielsweise abcdef und abcXYZdef angeben, möchte ich feststellen, dass abcXYZdef ist abcdef mit XYZ an Position 4 eingefügt.

Auf der anderen Seite, wenn abcdef und abRSTcdXYZef angegeben ist, möchte ich feststellen, dass die erste Zeichenfolge nicht mit nur einer einzigen Einfügung in die zweite

umgewandelt werden kann.

Ich weiß, dass ich StringA von beiden Seiten Zeichen für Zeichen durchgehen und prüfen kann, ob es den gesamten StringB abdeckt, aber das wäre ziemlich mühsam zu schreiben. Es wäre auch ziemlich langsam, dies in Python zu tun (wo ich gerade arbeite), und ich würde dafür lieber keine spezielle C-Erweiterung schreiben.

Gibt es irgendwelche cleveren Dinge, die ich mit Regex's oder anderen Standard-String-Manipulationsfunktionen machen kann, die das für mich tun können?

edit: Zur Klarstellung ist StringC völlig unbekannt; Es gibt möglicherweise nicht einmal eine gültige StringC, und ich werde wissen wollen, ob das der Fall ist.

    
Li Haoyi 02.08.2011, 20:47
quelle

6 Antworten

6

Ein sehr unterschätztes Juwel in der Standardbibliothek ist difflib ...

%Vor%     
pyroscope 02.08.2011, 20:58
quelle
2

Das ... fühlt sich zu einem gewissen Grad kludgy an, und es ist wahrscheinlich nur halb da, aber es scheint, als hätte es in Ihrem Beispiel die Teilzeichenfolge gefunden und könnte wahrscheinlich etwas erweitert werden. Ich kann es in einer Minute mit etwas mehr Zeit zum Testen überarbeiten, aber es ist ein Annäherungskonzept:

%Vor%

Ich mag die Verwendung von range(len()) nicht, aber in diesem speziellen Anwendungsszenario denke ich, dass es angemessen ist. Es wird der Index gedruckt, wo eine Einfügung stattgefunden hat, wenn eine einzelne Einfügung s1 in s2 verwandelt.

    
g.d.d.c 02.08.2011 20:57
quelle
0

Ich weiß es nicht, aber du versuchst die "Entfernung bearbeiten" zu finden. Überprüfen von Wikipedia:

Ссылка

Sie können sich auch Peter Norvigs Rechtschreibkorrektur ansehen:

Ссылка

Ich denke, Sie könnten den Code aus dem Rechtschreibkorrektor anpassen, um das zu tun, was Sie brauchen.

Viel Glück.

    
steveha 02.08.2011 20:51
quelle
0
%Vor%     
Mark Ransom 02.08.2011 21:22
quelle
0
%Vor%

Und Beispiele ...

%Vor%     
Andrew Clark 02.08.2011 21:27
quelle
-2
%Vor%

Möglicherweise? Jetzt testen ...

    
krs1 02.08.2011 20:55
quelle

Tags und Links