文字列の中から、”(”に対応した")"を探す
13 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Mamoru Mabuchi
am 25 Aug. 2022
Kommentiert: Akira Agata
am 28 Aug. 2022
下記のような括弧を含む文字列があるとします。
文字列に含まれる"("に対応した")"が何文字目にあるかを調べたい場合、どのようにすれば良いでしょうか
text = "3*(A+(B+2))+5*(C+4)";
下記のように”(”が登場する位置と、対応する")"の位置を出力したいです。
ans =
3,11
6,10
15,19
0 Kommentare
Akzeptierte Antwort
交感神経優位なあかべぇ
am 27 Aug. 2022
Bearbeitet: 交感神経優位なあかべぇ
am 27 Aug. 2022
丸括弧の対応関係を取得する関数を作成してみました。
丸括弧の対応関係をひとつずつ地道に検索していくしかないのかなぁと思います。
text = "3*(A+(B+2))+5*(C+4)";
bracketsList = GetBracketsPatternList(text);
disp(bracketsList);
% 丸括弧の対応関係リストを取得します。
function bracketsList = GetBracketsPatternList(text)
openBrackets = strfind(text, '(');
closeBrackets = strfind(text, ')');
if length(openBrackets) ~= length(closeBrackets)
error(' ( と ) の数があっていません。');
end
bracketsList = zeros(length(openBrackets), 2);% 括弧対応関係リストの初期化
for closeIdx = 1 : length(closeBrackets)% 閉じ括弧を基準に開き括弧を検索
findOpenBrackets = openBrackets(openBrackets < closeBrackets(closeIdx));% 検索している閉じ括弧より前に位置する開き括弧の位置を全て取得
if isempty(findOpenBrackets)
error(' ( と )の対応関係に誤りがあります。');
end
findIdx = find(~ismember(findOpenBrackets, bracketsList(:,1)), 1, 'last');% すでに発見されている開き括弧を除外し、最も後方に位置する開き括弧を取得
if isempty(findIdx)
error(' ( と )の対応関係に誤りがあります。');
else
bracketsList(closeIdx, :) = [findOpenBrackets(findIdx), closeBrackets(closeIdx)];
end
end
% 括弧対応関係リストを開き括弧を基準に昇順にする。
[~, sortIdx] = sort(bracketsList(:,1));
bracketsList = bracketsList(sortIdx, :);
end
1 Kommentar
Akira Agata
am 28 Aug. 2022
+1
正規表現を使っても同じように検出することができます。
以下はその一例です。
% サンプルテキスト
text = "3*(A+(B+2))+5*(C+4)";
% 準備
textOriginal = text;
textBrackets = [];
nPos = [];
% 正規表現を使って文字列 '([丸括弧以外の文字])' を地道に検出
while contains(text, '(')
% 対象を検出
[cTmp, n1, n2] =...
regexp(text,'\([^\(\)]+\)','match','once','start','end');
% 検出した文字列とポジションを記録
textBrackets = [textBrackets; extractBetween(textOriginal, n1, n2)];
nPos = [nPos; n1, n2];
% 検出した文字列を同じ長さの 'xxxx...' で置き換え
len = strlength(cTmp);
pat = repelem('x', 1, len);
text = replace(text, cTmp, pat);
end
% 結果を表示
disp(nPos)
disp(textBrackets)
Weitere Antworten (0)
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!