从字符串源列表动态生成最短正则表达式
Generating the Shortest Regex Dynamically from a source List of Strings
我有一堆代表一系列字符串的 SKU(库存单位),我想创建一个正则表达式来匹配它们。
因此,例如,如果我有 SKU:
var skus = new[] { "BATPAG003", "BATTWLP03", "BATTWLP04", "BATTWSP04", "SPIFATB01" };
...我想自动生成正则表达式以识别任何一个 SKU。
我知道我可以简单地做 "BATPAG003|BATTWLP03|BATTWLP04|BATTWSP04|SPIFATB01"
,但 SKU 列表可能会很长,我想将生成的正则表达式压缩为 "BAT(PAG003|TW(LP0(3|4)|SP04))|SPIFATB01"
所以这是一个组合数学练习。我想生成所有可能的正则表达式来匹配我的任何输入字符串,认为最短的可能是最好的。
例如,我可以生成以下任何一个:
BATPAG003|BATTWLP03|BATTWLP04|BATTWSP04|SPIFATB01
BAT(PAG003|TW(LP0(3|4)|SP04))|SPIFATB01
BAT(PAG003|TW(LP(03|04)|SP04))|SPIFATB01
B(ATPAG003|ATTW(LP0(3|4)|ATSP04))|SPIFATB01
任何一个都可以,但我可能会选择最短的那个。
首先,我尝试实现这个功能:
Func<IEnumerable<string>, IEnumerable<string>> regexify = null;
regexify = xs =>
from n in Enumerable.Range(1, 10)
let g = xs.ToArray().Where(s => !String.IsNullOrWhiteSpace(s)).GroupBy(x => new String(x.Take(n).ToArray()), x => new String(x.Skip(n).ToArray()))
let parts = g.SelectMany(x => x.Count() > 1 ? regexify(x).Select(y => x.Key + "(" + String.Join("|", y) + ")") : new [] { x.Key + String.Join("", x) })
let regex = String.Join("|", parts)
orderby regex.Length
select regex;
这需要我的来源 skus
并生成可能的 Regex 列表,但它不起作用。这是当前输出:
BATPAG003|BATTWLP03|BATTWLP04|BATTWSP04|SPIFATB01
BATPAG003|BATTWLP03|BATTWLP04|BATTWSP04|SPIFATB01
BATPAG003|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWSP04|SPIFATB01
BATPAG003|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|BATTWSP04|SPIFATB01
BATPAG003|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|BATTWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|BATTWSP04|SPIFATB01
BATPAG003|BATTW(LP03|LP04|SP04)|BATTW(LP03|LP04|SP04)|BATTW(LP03|LP04|SP04)|BATTW(LP03|LP04|SP04)|BATTW(LP03|LP04|SP04)|BATTW(LP03|LP04|SP04)|BATTW(LP03|LP04|SP04)|BATTW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|BATTW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|BATTW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04)|SPIFATB01
BATPAG003|BATT(WLP03|WLP04|WSP04)|BATT(WLP03|WLP04|WSP04)|BATT(WLP03|WLP04|WSP04)|BATT(WLP03|WLP04|WSP04)|BATT(WLP03|WLP04|WSP04)|BATT(WLP03|WLP04|WSP04)|BATT(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|BATT(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|BATT(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|BATT(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|SPIFATB01
BAT(PAG003|TWLP03|TWLP04|TWSP04)|BAT(PAG003|TWLP03|TWLP04|TWSP04)|BAT(PAG003|TWLP03|TWLP04|TWSP04)|BAT(PAG003|TWLP03|TWLP04|TWSP04)|BAT(PAG003|TWLP03|TWLP04|TWSP04)|BAT(PAG003|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWSP04)|BAT(PAG003|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|TWSP04)|BAT(PAG003|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|TWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|TWSP04)|BAT(PAG003|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|TW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|TW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|BAT(PAG003|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|T(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|T(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|T(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04)))|SPIFATB01
BA(TPAG003|TTWLP03|TTWLP04|TTWSP04)|BA(TPAG003|TTWLP03|TTWLP04|TTWSP04)|BA(TPAG003|TTWLP03|TTWLP04|TTWSP04)|BA(TPAG003|TTWLP03|TTWLP04|TTWSP04)|BA(TPAG003|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWSP04)|BA(TPAG003|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|TTWSP04)|BA(TPAG003|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|TTWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|TTWSP04)|BA(TPAG003|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|TTW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|TTW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|BA(TPAG003|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|TT(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|TT(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|TT(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04)))|BA(T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWSP04)|T(PAG003|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|TWSP04)|T(PAG003|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|TWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|TWSP04)|T(PAG003|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|TW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|TW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|T(PAG003|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|T(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|T(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|T(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))))|SPIFATB01
B(ATPAG003|ATTWLP03|ATTWLP04|ATTWSP04)|B(ATPAG003|ATTWLP03|ATTWLP04|ATTWSP04)|B(ATPAG003|ATTWLP03|ATTWLP04|ATTWSP04)|B(ATPAG003|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWSP04)|B(ATPAG003|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|ATTWSP04)|B(ATPAG003|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|ATTWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|ATTWSP04)|B(ATPAG003|ATTW(LP03|LP04|SP04)|ATTW(LP03|LP04|SP04)|ATTW(LP03|LP04|SP04)|ATTW(LP03|LP04|SP04)|ATTW(LP03|LP04|SP04)|ATTW(LP03|LP04|SP04)|ATTW(LP03|LP04|SP04)|ATTW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|ATTW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|ATTW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|B(ATPAG003|ATT(WLP03|WLP04|WSP04)|ATT(WLP03|WLP04|WSP04)|ATT(WLP03|WLP04|WSP04)|ATT(WLP03|WLP04|WSP04)|ATT(WLP03|WLP04|WSP04)|ATT(WLP03|WLP04|WSP04)|ATT(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|ATT(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|ATT(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|ATT(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04)))|B(AT(PAG003|TWLP03|TWLP04|TWSP04)|AT(PAG003|TWLP03|TWLP04|TWSP04)|AT(PAG003|TWLP03|TWLP04|TWSP04)|AT(PAG003|TWLP03|TWLP04|TWSP04)|AT(PAG003|TWLP03|TWLP04|TWSP04)|AT(PAG003|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWSP04)|AT(PAG003|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|TWSP04)|AT(PAG003|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|TWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|TWSP04)|AT(PAG003|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|TW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|TW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|AT(PAG003|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|T(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|T(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|T(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))))|B(A(TPAG003|TTWLP03|TTWLP04|TTWSP04)|A(TPAG003|TTWLP03|TTWLP04|TTWSP04)|A(TPAG003|TTWLP03|TTWLP04|TTWSP04)|A(TPAG003|TTWLP03|TTWLP04|TTWSP04)|A(TPAG003|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWSP04)|A(TPAG003|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|TTWSP04)|A(TPAG003|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|TTWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|TTWSP04)|A(TPAG003|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|TTW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|TTW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|A(TPAG003|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|TT(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|TT(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|TT(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04)))|A(T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWSP04)|T(PAG003|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|TWSP04)|T(PAG003|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|TWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|TWSP04)|T(PAG003|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|TW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|TW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|T(PAG003|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|T(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|T(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|T(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04)))))|SPIFATB01
感觉很接近,我觉得我做的有点不对。
如果每个 SKU id 具有相同的长度,则此方法有效。
// ...
string regexStr = Calculate(skus);
// ...
public static string Calculate(IEnumerable<string> rest) {
if (rest.First().Length > 0) {
string[] groups = rest.GroupBy(r => r[0])
.Select(g => g.Key + Calculate(g.Select(e => e.Substring(1))))
.ToArray();
return groups.Length > 1 ? "(" + string.Join("|", groups) + ")" : groups[0];
} else {
return string.Empty;
}
}
这是我最终得出的结果:
var skus = new[] { "BATPAG003", "BATTWLP03", "BATTWLP04", "BATTWSP04", "SPIFATB01" };
Func<IEnumerable<IGrouping<string, string>>, IEnumerable<string>> regexify = null;
Func<IEnumerable<string>, IEnumerable<string>> generate =
xs =>
from n in Enumerable.Range(2, 20)
let g = xs.GroupBy(x => new String(x.Take(n).ToArray()), x => new String(x.Skip(n).ToArray()))
where g.Count() != xs.Count()
from r in regexify(g)
select r;
regexify = gxs =>
{
if (!gxs.Any())
{
return new [] { "" };
}
else
{
var rs = regexify(gxs.Skip(1)).ToArray();
return
from f in gxs.Take(1)
from z in new [] { String.Join("|", f) }.Concat(f.Count() > 1 ? generate(f) : Enumerable.Empty<string>())
from r in rs
select f.Key + (f.Count() == 1 ? z : $"({z})") + (r != "" ? "|" + r : "");
}
};
然后使用这个查询:
generate(skus).OrderBy(x => x).OrderBy(x => x.Length);
...我得到了这个结果:
BAT(PAG003|TW(LP0(3|4)|SP04))|SPIFATB01
BAT(PAG003|TWLP0(3|4)|TWSP04)|SPIFATB01
BA(TPAG003|TTW(LP0(3|4)|SP04))|SPIFATB01
BAT(PAG003|TW(LP(03|04)|SP04))|SPIFATB01
BAT(PAG003|TW(LP03|LP04|SP04))|SPIFATB01
BAT(PAG003|TWLP(03|04)|TWSP04)|SPIFATB01
BATPAG003|BATTW(LP0(3|4)|SP04)|SPIFATB01
BA(TPAG003|TT(WLP0(3|4)|WSP04))|SPIFATB01
BA(TPAG003|TTW(LP(03|04)|SP04))|SPIFATB01
BA(TPAG003|TTW(LP03|LP04|SP04))|SPIFATB01
BA(TPAG003|TTWLP0(3|4)|TTWSP04)|SPIFATB01
BAT(PAG003|TWL(P0(3|4))|TWSP04)|SPIFATB01
BAT(PAG003|TWL(P03|P04)|TWSP04)|SPIFATB01
BATPAG003|BATT(WLP0(3|4)|WSP04)|SPIFATB01
BATPAG003|BATTW(LP(03|04)|SP04)|SPIFATB01
BATPAG003|BATTW(LP03|LP04|SP04)|SPIFATB01
BA(TPAG003|TT(WLP(03|04)|WSP04))|SPIFATB01
BA(TPAG003|TTWLP(03|04)|TTWSP04)|SPIFATB01
BAT(PAG003|TWLP03|TWLP04|TWSP04)|SPIFATB01
BATPAG003|BATT(WLP(03|04)|WSP04)|SPIFATB01
BA(TPAG003|TT(WL(P0(3|4))|WSP04))|SPIFATB01
BA(TPAG003|TT(WL(P03|P04)|WSP04))|SPIFATB01
BA(TPAG003|TT(WLP03|WLP04|WSP04))|SPIFATB01
BA(TPAG003|TTWL(P0(3|4))|TTWSP04)|SPIFATB01
BA(TPAG003|TTWL(P03|P04)|TTWSP04)|SPIFATB01
BATPAG003|BATT(WL(P0(3|4))|WSP04)|SPIFATB01
BATPAG003|BATT(WL(P03|P04)|WSP04)|SPIFATB01
BATPAG003|BATT(WLP03|WLP04|WSP04)|SPIFATB01
BATPAG003|BATTWLP0(3|4)|BATTWSP04|SPIFATB01
BATPAG003|BATTWLP(03|04)|BATTWSP04|SPIFATB01
BA(TPAG003|TTWLP03|TTWLP04|TTWSP04)|SPIFATB01
BATPAG003|BATTWL(P0(3|4))|BATTWSP04|SPIFATB01
BATPAG003|BATTWL(P03|P04)|BATTWSP04|SPIFATB01
我的方法唯一的问题是计算时间。我的一些来源列表有将近 100 个 SKU。有些运行花费的时间比我等待的时间长,不得不将其分解成更小的块,然后手动连接。
获取您 sku 的 所有 的完整列表,并制作一个三元树正则表达式。
添加或删除 sku 时,重新生成正则表达式。也许你的数据库
每周生成一次。
此实用程序可在不到半秒的时间内生成 10,000 个字符串的正则表达式
大小并不重要,可能是 300,000 个字符串。
例如,这里是 175,000 word dictionary 的正则表达式。
我有一堆代表一系列字符串的 SKU(库存单位),我想创建一个正则表达式来匹配它们。
因此,例如,如果我有 SKU:
var skus = new[] { "BATPAG003", "BATTWLP03", "BATTWLP04", "BATTWSP04", "SPIFATB01" };
...我想自动生成正则表达式以识别任何一个 SKU。
我知道我可以简单地做 "BATPAG003|BATTWLP03|BATTWLP04|BATTWSP04|SPIFATB01"
,但 SKU 列表可能会很长,我想将生成的正则表达式压缩为 "BAT(PAG003|TW(LP0(3|4)|SP04))|SPIFATB01"
所以这是一个组合数学练习。我想生成所有可能的正则表达式来匹配我的任何输入字符串,认为最短的可能是最好的。
例如,我可以生成以下任何一个:
BATPAG003|BATTWLP03|BATTWLP04|BATTWSP04|SPIFATB01
BAT(PAG003|TW(LP0(3|4)|SP04))|SPIFATB01
BAT(PAG003|TW(LP(03|04)|SP04))|SPIFATB01
B(ATPAG003|ATTW(LP0(3|4)|ATSP04))|SPIFATB01
任何一个都可以,但我可能会选择最短的那个。
首先,我尝试实现这个功能:
Func<IEnumerable<string>, IEnumerable<string>> regexify = null;
regexify = xs =>
from n in Enumerable.Range(1, 10)
let g = xs.ToArray().Where(s => !String.IsNullOrWhiteSpace(s)).GroupBy(x => new String(x.Take(n).ToArray()), x => new String(x.Skip(n).ToArray()))
let parts = g.SelectMany(x => x.Count() > 1 ? regexify(x).Select(y => x.Key + "(" + String.Join("|", y) + ")") : new [] { x.Key + String.Join("", x) })
let regex = String.Join("|", parts)
orderby regex.Length
select regex;
这需要我的来源 skus
并生成可能的 Regex 列表,但它不起作用。这是当前输出:
BATPAG003|BATTWLP03|BATTWLP04|BATTWSP04|SPIFATB01
BATPAG003|BATTWLP03|BATTWLP04|BATTWSP04|SPIFATB01
BATPAG003|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWLP0(3|4)|BATTWSP04|SPIFATB01
BATPAG003|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(03|04)|BATTWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|BATTWSP04|SPIFATB01
BATPAG003|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P03|P04)|BATTWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|BATTWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|BATTWSP04|SPIFATB01
BATPAG003|BATTW(LP03|LP04|SP04)|BATTW(LP03|LP04|SP04)|BATTW(LP03|LP04|SP04)|BATTW(LP03|LP04|SP04)|BATTW(LP03|LP04|SP04)|BATTW(LP03|LP04|SP04)|BATTW(LP03|LP04|SP04)|BATTW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|BATTW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|BATTW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04)|SPIFATB01
BATPAG003|BATT(WLP03|WLP04|WSP04)|BATT(WLP03|WLP04|WSP04)|BATT(WLP03|WLP04|WSP04)|BATT(WLP03|WLP04|WSP04)|BATT(WLP03|WLP04|WSP04)|BATT(WLP03|WLP04|WSP04)|BATT(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|BATT(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|BATT(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|BATT(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|SPIFATB01
BAT(PAG003|TWLP03|TWLP04|TWSP04)|BAT(PAG003|TWLP03|TWLP04|TWSP04)|BAT(PAG003|TWLP03|TWLP04|TWSP04)|BAT(PAG003|TWLP03|TWLP04|TWSP04)|BAT(PAG003|TWLP03|TWLP04|TWSP04)|BAT(PAG003|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWSP04)|BAT(PAG003|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|TWSP04)|BAT(PAG003|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|TWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|TWSP04)|BAT(PAG003|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|TW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|TW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|BAT(PAG003|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|T(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|T(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|T(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04)))|SPIFATB01
BA(TPAG003|TTWLP03|TTWLP04|TTWSP04)|BA(TPAG003|TTWLP03|TTWLP04|TTWSP04)|BA(TPAG003|TTWLP03|TTWLP04|TTWSP04)|BA(TPAG003|TTWLP03|TTWLP04|TTWSP04)|BA(TPAG003|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWSP04)|BA(TPAG003|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|TTWSP04)|BA(TPAG003|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|TTWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|TTWSP04)|BA(TPAG003|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|TTW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|TTW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|BA(TPAG003|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|TT(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|TT(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|TT(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04)))|BA(T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWSP04)|T(PAG003|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|TWSP04)|T(PAG003|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|TWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|TWSP04)|T(PAG003|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|TW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|TW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|T(PAG003|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|T(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|T(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|T(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))))|SPIFATB01
B(ATPAG003|ATTWLP03|ATTWLP04|ATTWSP04)|B(ATPAG003|ATTWLP03|ATTWLP04|ATTWSP04)|B(ATPAG003|ATTWLP03|ATTWLP04|ATTWSP04)|B(ATPAG003|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWLP0(3|4)|ATTWSP04)|B(ATPAG003|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(03|04)|ATTWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|ATTWSP04)|B(ATPAG003|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P03|P04)|ATTWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|ATTWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|ATTWSP04)|B(ATPAG003|ATTW(LP03|LP04|SP04)|ATTW(LP03|LP04|SP04)|ATTW(LP03|LP04|SP04)|ATTW(LP03|LP04|SP04)|ATTW(LP03|LP04|SP04)|ATTW(LP03|LP04|SP04)|ATTW(LP03|LP04|SP04)|ATTW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|ATTW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|ATTW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|B(ATPAG003|ATT(WLP03|WLP04|WSP04)|ATT(WLP03|WLP04|WSP04)|ATT(WLP03|WLP04|WSP04)|ATT(WLP03|WLP04|WSP04)|ATT(WLP03|WLP04|WSP04)|ATT(WLP03|WLP04|WSP04)|ATT(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|ATT(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|ATT(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|ATT(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04)))|B(AT(PAG003|TWLP03|TWLP04|TWSP04)|AT(PAG003|TWLP03|TWLP04|TWSP04)|AT(PAG003|TWLP03|TWLP04|TWSP04)|AT(PAG003|TWLP03|TWLP04|TWSP04)|AT(PAG003|TWLP03|TWLP04|TWSP04)|AT(PAG003|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWSP04)|AT(PAG003|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|TWSP04)|AT(PAG003|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|TWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|TWSP04)|AT(PAG003|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|TW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|TW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|AT(PAG003|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|T(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|T(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|T(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))))|B(A(TPAG003|TTWLP03|TTWLP04|TTWSP04)|A(TPAG003|TTWLP03|TTWLP04|TTWSP04)|A(TPAG003|TTWLP03|TTWLP04|TTWSP04)|A(TPAG003|TTWLP03|TTWLP04|TTWSP04)|A(TPAG003|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWLP0(3|4)|TTWSP04)|A(TPAG003|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(03|04)|TTWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|TTWSP04)|A(TPAG003|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P03|P04)|TTWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|TTWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|TTWSP04)|A(TPAG003|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP03|LP04|SP04)|TTW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|TTW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|TTW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|A(TPAG003|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP03|WLP04|WSP04)|TT(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|TT(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|TT(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|TT(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04)))|A(T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP03|TWLP04|TWSP04)|T(PAG003|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWLP0(3|4)|TWSP04)|T(PAG003|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(03|04)|TWLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|TWSP04)|T(PAG003|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P03|P04)|TWL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|TWL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|TWSP04)|T(PAG003|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP03|LP04|SP04)|TW(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|TW(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|TW(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04))|T(PAG003|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP03|WLP04|WSP04)|T(WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WLP0(3|4)|WSP04)|T(WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(03|04)|WLP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|WSP04)|T(WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P03|P04)|WL(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|WL(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|WSP04)|T(W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP03|LP04|SP04)|W(LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|LP0(3|4)|SP04)|W(LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(03|04)|LP(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4))|SP04)|W(L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P03|P04)|L(P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4)|P0(3|4))|L(P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(03|04)|P(0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)|0(3|4)))|SP04)))))|SPIFATB01
感觉很接近,我觉得我做的有点不对。
如果每个 SKU id 具有相同的长度,则此方法有效。
// ...
string regexStr = Calculate(skus);
// ...
public static string Calculate(IEnumerable<string> rest) {
if (rest.First().Length > 0) {
string[] groups = rest.GroupBy(r => r[0])
.Select(g => g.Key + Calculate(g.Select(e => e.Substring(1))))
.ToArray();
return groups.Length > 1 ? "(" + string.Join("|", groups) + ")" : groups[0];
} else {
return string.Empty;
}
}
这是我最终得出的结果:
var skus = new[] { "BATPAG003", "BATTWLP03", "BATTWLP04", "BATTWSP04", "SPIFATB01" };
Func<IEnumerable<IGrouping<string, string>>, IEnumerable<string>> regexify = null;
Func<IEnumerable<string>, IEnumerable<string>> generate =
xs =>
from n in Enumerable.Range(2, 20)
let g = xs.GroupBy(x => new String(x.Take(n).ToArray()), x => new String(x.Skip(n).ToArray()))
where g.Count() != xs.Count()
from r in regexify(g)
select r;
regexify = gxs =>
{
if (!gxs.Any())
{
return new [] { "" };
}
else
{
var rs = regexify(gxs.Skip(1)).ToArray();
return
from f in gxs.Take(1)
from z in new [] { String.Join("|", f) }.Concat(f.Count() > 1 ? generate(f) : Enumerable.Empty<string>())
from r in rs
select f.Key + (f.Count() == 1 ? z : $"({z})") + (r != "" ? "|" + r : "");
}
};
然后使用这个查询:
generate(skus).OrderBy(x => x).OrderBy(x => x.Length);
...我得到了这个结果:
BAT(PAG003|TW(LP0(3|4)|SP04))|SPIFATB01 BAT(PAG003|TWLP0(3|4)|TWSP04)|SPIFATB01 BA(TPAG003|TTW(LP0(3|4)|SP04))|SPIFATB01 BAT(PAG003|TW(LP(03|04)|SP04))|SPIFATB01 BAT(PAG003|TW(LP03|LP04|SP04))|SPIFATB01 BAT(PAG003|TWLP(03|04)|TWSP04)|SPIFATB01 BATPAG003|BATTW(LP0(3|4)|SP04)|SPIFATB01 BA(TPAG003|TT(WLP0(3|4)|WSP04))|SPIFATB01 BA(TPAG003|TTW(LP(03|04)|SP04))|SPIFATB01 BA(TPAG003|TTW(LP03|LP04|SP04))|SPIFATB01 BA(TPAG003|TTWLP0(3|4)|TTWSP04)|SPIFATB01 BAT(PAG003|TWL(P0(3|4))|TWSP04)|SPIFATB01 BAT(PAG003|TWL(P03|P04)|TWSP04)|SPIFATB01 BATPAG003|BATT(WLP0(3|4)|WSP04)|SPIFATB01 BATPAG003|BATTW(LP(03|04)|SP04)|SPIFATB01 BATPAG003|BATTW(LP03|LP04|SP04)|SPIFATB01 BA(TPAG003|TT(WLP(03|04)|WSP04))|SPIFATB01 BA(TPAG003|TTWLP(03|04)|TTWSP04)|SPIFATB01 BAT(PAG003|TWLP03|TWLP04|TWSP04)|SPIFATB01 BATPAG003|BATT(WLP(03|04)|WSP04)|SPIFATB01 BA(TPAG003|TT(WL(P0(3|4))|WSP04))|SPIFATB01 BA(TPAG003|TT(WL(P03|P04)|WSP04))|SPIFATB01 BA(TPAG003|TT(WLP03|WLP04|WSP04))|SPIFATB01 BA(TPAG003|TTWL(P0(3|4))|TTWSP04)|SPIFATB01 BA(TPAG003|TTWL(P03|P04)|TTWSP04)|SPIFATB01 BATPAG003|BATT(WL(P0(3|4))|WSP04)|SPIFATB01 BATPAG003|BATT(WL(P03|P04)|WSP04)|SPIFATB01 BATPAG003|BATT(WLP03|WLP04|WSP04)|SPIFATB01 BATPAG003|BATTWLP0(3|4)|BATTWSP04|SPIFATB01 BATPAG003|BATTWLP(03|04)|BATTWSP04|SPIFATB01 BA(TPAG003|TTWLP03|TTWLP04|TTWSP04)|SPIFATB01 BATPAG003|BATTWL(P0(3|4))|BATTWSP04|SPIFATB01 BATPAG003|BATTWL(P03|P04)|BATTWSP04|SPIFATB01
我的方法唯一的问题是计算时间。我的一些来源列表有将近 100 个 SKU。有些运行花费的时间比我等待的时间长,不得不将其分解成更小的块,然后手动连接。
获取您 sku 的 所有 的完整列表,并制作一个三元树正则表达式。
添加或删除 sku 时,重新生成正则表达式。也许你的数据库
每周生成一次。
此实用程序可在不到半秒的时间内生成 10,000 个字符串的正则表达式
大小并不重要,可能是 300,000 个字符串。
例如,这里是 175,000 word dictionary 的正则表达式。