我想foo在一系列可能包含foobar.
我目前正在使用regexpinMATLAB并希望調整搜索模式regexp以排除包含包含我定義的子字串的字串的單元格。
我知道這有點違背 的想法regexp,但我相當肯定有一種方法可以做我想做的事。
作為 MWE,這是我擁有的資料片段(以單元格格式),稱為potentialfields:
'horaracha'
'sol'
'presmax'
'horapresmax'
'presmin'
'horapresmin'
以及regexp我目前使用的運算式:
selected_fields={'sol','presmin'};
diffset=setdiff(potentialfields,selected_fields);
pattern=strjoin(diffset,'|');
idx_to_delete=~cellfun(@isempty,regexp(potentialfields,pattern));
的預期輸出idx_to_delete如下:
1 0 1 1 0 1
目前,輸出是1 0 1 1 1 1因為horapresmincontains presmin。
非常感謝您提前。
uj5u.com熱心網友回復:
regexp在這里有點矯枉過正,ismember是專門為在單元格中查找確切字串而設計的內置函式
idx_to_delete = ismember( potentialfields, selected_fields );
如果你真的準備好了,regexp你可以像這樣使用起始錨 ( ^) 和結束錨 ( $):
pattern = ['^(', strjoin( selected_fields, '|' ), ')$'];
idx_to_delete2 = ~cellfun( @isempty, regexp( potentialfields, pattern ) );
uj5u.com熱心網友回復:
您可以動態構建基于單詞邊界的正則運算式:
pattern = strcat('\<(', strjoin(diffset,'|'), ')\>')
idx_to_delete=~cellfun(@isempty,regexp(potentialfields,pattern))
使用strjoin(diffset,'|'),您將創建交替模式,并且\<(...)\>是一個用單詞邊界包裝的分組結構,僅匹配單詞邊界適用于每個替代開始和結束字符的整個單詞。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/410140.html
標籤:
上一篇:如何在可選塊中捕獲一個句點
