extractAfterの記事に書かれてあるプログラムを実行した際になぜ実行結果のようになるかが分かりません。
9 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
Atsushi Ueno
on 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”しか出力されません。
マッチ文字列の出力方法が良く分かっていなくてすいません
More Answers (0)
See Also
Categories
Find more on Language Support in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!