extractAft​erの記事に書かれて​あるプログラムを実行​した際になぜ実行結果​のようになるかが分か​りません。

9 views (last 30 days)
裕也 福田
裕也 福田 on 11 Oct 2021
Commented: 裕也 福田 on 11 Oct 2021
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か所の実行結果に疑問があるので、なぜこの実行結果になるのかを解説していただけたら幸いです。何卒よろしくお願いいたします。

Accepted Answer

Atsushi Ueno
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回出現する場合
newStr = "brown fox"
str = "The quick brown fox The quick brown fox";
newStr = extractAfter(str,"quick ") % pat が str 内で2回出現する場合
newStr = "brown fox The quick brown fox"
ここから本題です。
str = "C:\Temp\MyReport.docx";
pat = asManyOfPattern(wildcardPattern + "\");
path = extract(str,pat) % なぜ14x1 string arrayになるかは謎です。extractの仕様理解不足です
path = 14×1 string array
"C:\Temp\" "" "" "" "" "" "" "" "" "" "" "" "" ""
filenames = extractAfter(str,pat)
filenames = "MyReport.docx"
>左のコードの説明書きを読むとpatが最初に出てきたところから最後までを抽出するとなっていました。ですので、添付画像のようにTemp\がついたままになるのではないかと予測していました。
asManyOfPattern(wildcardPattern + "\")は「最長一致(最短一致+"\")」なので"C:\Temp\"にマッチします。従って、extractAfter(str,pat)に対してpat が str 内で"C:\”"Temp\"の2回ではなく、"C:\Temp\"の1回しか出現していません。だから"C:\Temp\"の後の”MyReport.docx”しか出力されません。
マッチ文字列の出力方法が良く分かっていなくてすいません
  1 Comment
裕也 福田
裕也 福田 on 11 Oct 2021
ありがとうございます。asManyOfPattern()は最長一致で、wildcardPatternは最短一致ということなんですね!少し勘違いしていました。extractの出力結果よくわかりませんよね…
最後の出力結果については、すっきりしたのでこれでやってることが捗ります。ありがとうございました!

Sign in to comment.

More Answers (0)

Products


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!