2016-05-10 15 views
2

Ich möchte nach einer bestimmten Zeichenfolge in Matlab Zelle suchen. Zum Beispiel enthält meine Zelle, die eine Spalte von Strings wie dieserSo suchen Sie nach einer bestimmten Zeichenfolge im Zellenfeld

variable(:,5) = {'10';'10;20';'20';'10;20';'10';'10';'20'}; 

würde ich für alle Zellen suchen, wie die nur '10' und löschen Sie sie haben.

Ich habe versucht, diese Anweisung für

is10 = ~cellfun(@ isempty , strfind (variable(:,5) , '10')); 

Suche Aber diese gibt alle Zellen mit '10' (einschließlich derjenigen mit '10;20').

Ich möchte nur die Zellen mit reinem '10' Wert

haben Was ist der beste Weg, dies zu tun?

Antwort

7

Es funktioniert nicht wie erwartet, weil strfind für eine partielle Zeichenfolge Übereinstimmung ermöglicht. Was Sie wollen, ist ein genau übereinstimmen. Sie können dies mit strcmp tun. Außerdem kann die Eingabe zu strcmp tatsächlich ein Zellenfeld von Zeichenfolgen sein, so dass Sie es folgendermaßen verwenden können.

A = {'10';'10;20';'20';'10;20';'10';'10';'20'}; 
is10 = strcmp(A, '10'); 
%// 1 0 0 0 1 1 0 

Sie könnten auch ismember verwenden, um die gleiche Sache zu tun.

is10 = ismember(A, '10'); 
%// 1 0 0 0 1 1 0 

Als Randbemerkung, können die meisten String-Funktionen (einschließlich strfind) akzeptieren tatsächlich eine Zellenanordnung von Strings als Eingabe. In Ihrem ersten Post ist die Umhüllung von strfind innerhalb von cellfun nicht notwendig.

+0

Um einen Schritt zu überspringen, können Sie mit 'A (strcmp (A, '10 ')) = []' gehen, um die unerwünschten Zellen sofort zu löschen. – JCKaz

+0

@JCKaz Technisch gesehen überspringt das keine Schritte, sondern nur den * nächsten * Schritt. Wenn Sie wirklich einen Schritt überspringen wollten, können Sie 'regexp' verwenden, um ein Zellen-Array der Nicht-' '10''s zurückzugeben. – Suever

+0

Gibt 'strfind' logische Rückgaben zurück? –

Verwandte Themen