考虑下面这个例子:
str = "AbcAde" ;
StringCases[str, "A" ~~ Shortest[a__] ~~ "e" :> a]
会出现这种现象,是因为匹配是从左往右进行的,模式"A" ~~ Shortest[a__] ~~ "e"最先匹配到了最左端的A。也就是说,这个“最短”的寻找会以“包含最左端的A”为前提,“不包含最左端A”的情况则不在考虑之列。
此问题可参考SE帖子《Wrong result from StringCases with Shortest》(mathematica.stackexchange.com/a/72293/1871)
顺便,SequenceReplace也有类似行为:
lst = {A, b, c, A, d, e};
SequenceReplace[lst, {A, Shortest[a__], e} :> a]
str = "AbcAde" ;
StringCases[str, "A" ~~ Shortest[a__] ~~ "e" :> a]
会出现这种现象,是因为匹配是从左往右进行的,模式"A" ~~ Shortest[a__] ~~ "e"最先匹配到了最左端的A。也就是说,这个“最短”的寻找会以“包含最左端的A”为前提,“不包含最左端A”的情况则不在考虑之列。
此问题可参考SE帖子《Wrong result from StringCases with Shortest》(mathematica.stackexchange.com/a/72293/1871)
顺便,SequenceReplace也有类似行为:
lst = {A, b, c, A, d, e};
SequenceReplace[lst, {A, Shortest[a__], e} :> a]