文件名列的子字符串介于未知数量的字符之间当我输入数据时,我得到一个如下所示的文件名列:
| 文件名 |
| 测试名称 日期 ID# 晶圆和设备 ID1 #ID 注释 |
| 测试名称 日期 ID# 晶圆和设备 ID2 #ID 不同 注释 |
| 不同的测试名称日期ID#晶圆和设备ID1#ID注释 |
| 不同的测试名称日期ID#晶圆和设备ID2#ID不同的注释 |
我想要的是以下内容:
| 文件名 |
| 晶圆和器件ID1 |
| 晶圆和器件ID2 |
| 晶圆和器件ID1 |
| 晶圆和器件ID2 |
所有这些都具有不同的分隔符和字符串长度,我想要做的是使用“ID#”和“#ID”字符减去空格来提取晶圆和设备 ID。我找到了很多关于取出特定数量字符的信息,但我很难找到有关搜索字符串并从左侧删除字符串(在本例中为“ID#”及其之前的所有内容)以及从右侧删除字符串(在本例中为“#ID”及其之后的所有内容)并将字符串留在中间的任何信息。
提前感谢您的帮助。
高级统计建模数据混合和清理大规模定制质量与工艺工程回复:未知字符数之间的文件名列的子字符串Word() 函数可以轻松做到这一点。
Names Default To Here( 1 );
dt = Current Data Table();
For Each Row(
:File Name = Word( 1, :File Name, "#" )
);
回复:未知字符数之间的文件名列的子字符串吉姆,
刚才我确实尝试过这种方法。 它最终会删除第一个“#”字符之后的所有内容。 所以现在我为每一行得到这个:
测试名称 日期 ID
看起来使用 munger 或 substr 是可能的,但我也没有让它工作。
回复:未知字符数之间的文件名列的子字符串哎呀....只需更改以提取第二个单词
Names Default To Here( 1 );
dt = Current Data Table();
For Each Row(
:File Name = Word( 2, :File Name, "#" )
);
请花时间阅读脚本索引中的 Word() 函数。它将显示每个元素可以是什么,以及它如何工作的示例。
回复:未知字符数之间的文件名列的子字符串当提取很简单时,我喜欢使用 Word() 函数。 这是使用 Regex() 函数的另一种方法。 如果提取模式不简单,可以使用相同的方法,只需更改正则表达式即可。
Names Default to Here( 1 );
// set up example
dt = New Table( "Untitled",
Add Rows( 4 ),
New Column( "File Name",
Character,
"Nominal",
Set Values(
{"Test Name Date ID# Wafer and Device ID1 #ID comment",
"Test Name Date ID# Wafer and Device ID2 #ID different comment",
"Different Test Name Date ID# Wafer and Device ID1 #ID comment",
"Different Test Name Date ID# Wafer and Device ID2 #ID different comment"
}
)
)
);
// make a data column for result
dt << New Column( "Extract", "Character", "Nominal" );
// compute row-wise result
For Each Row(
:Extract = Regex( :File Name, "ID# (.+) #ID", "\1" );
);
这是结果:
