数据标准较差的文件名的正则表达式你好呀,
我刚刚在锡切斯举行的 2023 年探索峰会上看到了一场关于 Regex 的精彩演讲,我想知道是否可以使用此函数从我使用 PDF 导入向导进入 JMP 的文件名中提取关键变量。 问题在于文件名是由多个操作员创建的,并且没有通用标准。 我通常只使用重新编码功能和一些常规清理来获取我需要的内容,但这非常耗时,尤其是当我每周将 100 多个 PDF 导入 JMP 时。
这是一个示例脚本,向您展示我的数据是什么样的。 我要提取的关键变量是“产品类型”、“批次号”和“盒装样品”。 演讲中提到,另一个 JMP 用户也遇到了类似的问题,因此创建了一个脚本来提取他们需要的数据。 我不是 JSL 方面的专家,因此很想获得有关此问题的帮助,但我意识到它可能太复杂而无法自动化,因为文件名中有很多不一致之处。 任何帮助/建议都会很棒! 最好的问候,艾丽西亚
New Table( "REGEX Function Filename Example",
Add Rows( 8 ),
New Column( "Source Table",
Character,
"Nominal",
Set Selected,
Set Values(
{
"TYPE-A Z012345 BOX 10 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPE-A Z012345 BOX 129 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPE-B Z012346 BOX12 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"Z012347 TYPEB BOX16 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPEC Z12347 BOX 103 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"BOX 14 TYPE-C Z012350 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPE-D Z012450 BOX 142 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)",
"TYPED Z12451 BOX7 ImpactTemplate_01.pdf - 2023-02-14 14-09-03 Page(2) Table(1)"
}
)
),
New Column( "Product Type",
Character,
"Nominal",
Set Selected,
Set Values(
{"TYPE-A", "TYPE-A", "TYPE-B", "TYPE-B", "TYPE-C", "TYPE-C", "TYPE-D",
"TYPE-D"}
)
),
New Column( "Batch Number",
Character,
"Nominal",
Set Selected,
Set Values(
{"Z012345", "Z012345", "Z012346", "Z012347", "Z012347", "Z012350",
"Z012450", "Z012451"}
)
),
New Column( "Box Sampled",
Character,
"Nominal",
Set Selected,
Set Values(
{"BOX 10", "BOX 129", "BOX 12", "BOX 16", "BOX 103", "BOX 14", "BOX 142",
"BOX 7"}
)
)
)
数据存取回复:数据标准较差的文件名的正则表达式非常感谢@brady_brady和@vince_faller 。 这些解决方案非常有效,将节省我很多时间! 谢谢你们俩
回复:数据标准较差的文件名的正则表达式正如 Vince 的解决方案所示,Regex 可以快速解决这个问题,并且绝对是处理此类问题的首选方法。
正则表达式是你不可能一夜之间学会的东西之一......你在使用它时一点一点地学习它(并且,如果你像我一样,重新学习它)。
当您学习正则表达式时,请务必学习如何使用 Replace ( ) 和 items ( ) 命令操作字符串,并了解如何使用 sort list ( ) 和 concat items ( ) 命令操作列表。 这些命令不像正则表达式那么强大,也不像正则表达式那么灵活。 但是,您可以用它们做的事情令人惊讶,而且它们的简单性使它们易于理解和记住。 将它们视为达到了功能/易用性的“80/20”,以及 Eval Insert ( ) 等功能。 他们非常值得学习。
作为说明,请针对您提供的数据表运行下面的代码,并检查它创建的 4 列。
dt = current data table ( );
dt << new column ( "lis", character,
formula(
concatItems(
sortList (
items( [1 3],
substitute(:source table,
" ", "",
"-", "",
"TYPE", ",TYPE-",
"BOX", ",BOX ",
"Z", ",Z",
"Impact", ","
),
","
)
),
","
)
)
);
dt << Text to Columns( columns( :lis ), Delimiters( "," ) );
回复:数据标准较差的文件名的正则表达式我想这些都击中了你。
dt << New Column("MyProdType", character, formula(Regex( :Source Table, "TYPE-?(\w)", "TYPE-\1" )));
dt << New Column("MyBatchNum", character, formula(
v=Regex( :Source Table, "Z0{0,6}(\d{0,6})", "\1"); // getting just the non zero values
"Z"||repeat("0", 6-length(v))||v
));
dt << New Column("My Box", character, formula(Regex( :Source Table, "BOX ?(\d+)", "BOX \1" )));