extractAfterの記事に書かれてあるプログラムを実行した際になぜ実行結果のようになるかが分かりません。
9 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
str = ["C:\Temp\MyReport.docx";
"C:\Data\Experiment1\Trial1\Sample1.csv";
"C:\Temp\Slides.pptx"]
level = wildcardPattern + "\"
pat = asManyOfPattern(level) // この部分で出力が1×1になっていますが、wildcardPatternの記事を踏まえると、添付画像の右下のように、\で区切られたリストになっていると予測しました。
filenames = extractAfter(str,pat) // 左のコードの説明書きを読むとpatが最初に出てきたところから最後までを抽出するとなっていました。ですので、添付画像のようにTemp\がついたままになるのではないかと予測していました。
// 以上、コメントで示した2か所の実行結果に疑問があるので、なぜこの実行結果になるのかを解説していただけたら幸いです。何卒よろしくお願いいたします。
0 commentaires
Réponse acceptée
Atsushi Ueno
le 11 Oct 2021
extractAfter(str,pat) :pat が str 内で複数回出現する場合、newStr は pat の最初の出現から str の最後までです。
確認してみたところ、下記の通りで上記の説明通りです。
str = "The quick brown fox";
newStr = extractAfter(str,"quick ") % pat が str 内で1回出現する場合
str = "The quick brown fox The quick brown fox";
newStr = extractAfter(str,"quick ") % pat が str 内で2回出現する場合
ここから本題です。
str = "C:\Temp\MyReport.docx";
pat = asManyOfPattern(wildcardPattern + "\");
path = extract(str,pat) % なぜ14x1 string arrayになるかは謎です。extractの仕様理解不足です
filenames = extractAfter(str,pat)
>左のコードの説明書きを読むとpatが最初に出てきたところから最後までを抽出するとなっていました。ですので、添付画像のようにTemp\がついたままになるのではないかと予測していました。
asManyOfPattern(wildcardPattern + "\")は「最長一致(最短一致+"\")」なので"C:\Temp\"にマッチします。従って、extractAfter(str,pat)に対してpat が str 内で"C:\”と"Temp\"の2回ではなく、"C:\Temp\"の1回しか出現していません。だから"C:\Temp\"の後の”MyReport.docx”しか出力されません。
マッチ文字列の出力方法が良く分かっていなくてすいません
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Language Support dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!