web-dev-qa-db-ja.com

Matlabで文字列内の特定の文字を検索する

文字列'[email protected]'があるとします。 「@」の前後の文字列を2つの別々の文字列に格納したい。文字列内の「@」文字またはその他の文字を見つける最も簡単な方法は何でしょうか。

19
stanigator

[〜#〜] strtok [〜#〜] とインデックス操作はトリックを行う必要があります:

str = '[email protected]';
[name,address] = strtok(str,'@');
address = address(2:end);

または、最後の行も次のようになります。

address(1) = '';
17
gnovice

strreadを使用できます。

str = '[email protected]';
[a b] = strread(str, '%s %s', 'delimiter','@')
a = 
    'johndoe'
b = 
    'hotmail.com'
12
Amro

「最も簡単」の場合、

>> email = '[email protected]'
email =
[email protected]
>> email == '@'
ans =
  Columns 1 through 13
     0     0     0     0     0     0     0     1     0     0     0     0     0
  Columns 14 through 19
     0     0     0     0     0     0
>> at = find(email == '@')
at =
     8
>> email(1:at-1)
ans =
johndoe
>> email(at+1:end)
ans =
hotmail.com

複数の文字を含むものを探す場合や、@が1つだけあるかどうかがわからない場合は、少し複雑になります。その場合、MATLABには、正規表現を含むテキストを検索するための多くの関数(見る doc regexp)。

11
kwatford

[〜#〜] textscan [〜#〜] も機能します。

str = '[email protected]';
parts = textscan(str, '%s %s', 'Delimiter', '@');

パーツ{1}が「johndoe」、パーツ{2}が「hotmail.com」のセル配列を返します。

7
mtrw

このスレッドが今までに完全に列挙されていない場合、別のスレッドを追加できますか?便利なPerlベースのMATLAB関数:

email = '[email protected]';
parts = regexp(email,'@', 'split');

partsは、mtrwによるtextscanの実装に似た2要素のセル配列です。多分やり過ぎかもしれませんが、複数の区切り文字またはパターン検索によって文字列を分割する場合、regexpははるかに便利です。唯一の欠点は、15年のコーディングの後でまだ習得していない正規表現を使用していることです。

5
SnakeEyes1482