删除列表中包含单词的字符串我有一个文件名列表,我想从中选择某些文件。 前 4 位数字是年份,下划线充当分隔符,“abc”只是文件类型的标识符,后 3 位数字是 id,“摘要”或“结果”指的是文件类型文件。
首先,我只想查看“结果”文件。 我不知道如何从列表中删除所有“摘要”文件。
{"2021_abc_027_result.csv", "2021_abc_027_summary.csv", "2021_abc_028_result.csv",
"2021_abc_028_summary.csv", "2021_abc_029_result.csv", "2021_abc_029_summary.csv",
"2021_abc_038_result.csv", "2021_abc_038_summary.csv", "2021_abc_040_result.csv",
"2021_abc_040_summary.csv", "2021_abc_041_result.csv", "2021_abc_041_summary.csv",
"2021_abc_042_result.csv", "2021_abc_042_summary.csv", "2021_abc_043_result.csv",
"2021_abc_043_summary.csv", "2021_abc_044_result.csv", "2021_abc_044_summary.csv",
"2021_abc_045_result.csv", "2021_abc_045_summary.csv", "2021_abc_046_result.csv",
"2021_abc_046_summary.csv", "2021_abc_047_result.csv", "2021_abc_047_summary.csv",
"2021_abc_048_result.csv", "2021_abc_048_summary.csv", "2021_abc_049_result.csv",
"2021_abc_049_summary.csv", "2021_abc_050_result.csv", "2021_abc_050_summary.csv",
"2021_abc_051_result.csv", "2021_abc_051_summary.csv", "2021_abc_052_result.csv",
"2021_abc_052_summary.csv", "2021_abc_053_result.csv", "2021_abc_053_summary.csv",
"2021_abc_054_result.csv", "2021_abc_054_summary.csv", "2021_abc_055_result.csv",
"2021_abc_055_summary.csv", "2021_abc_056_result.csv", "2021_abc_056_summary.csv",
"2021_abc_057_result.csv", "2021_abc_057_summary.csv", "2021_abc_058_result.csv",
"2021_abc_058_summary.csv", "2021_abc_059_result.csv", "2021_abc_059_summary.csv",
"2021_abc_060_result.csv", "2021_abc_060_summary.csv", "2021_abc_061_result.csv",
"2021_abc_061_summary.csv", "2021_abc_062_result.csv", "2021_abc_062_summary.csv",
"2021_abc_063_result.csv", "2021_abc_063_summary.csv", "2021_abc_064_result.csv",
"2021_abc_064_summary.csv", "2021_abc_065_result.csv", "2021_abc_065_summary.csv",
"2021_abc_067_result.csv"}
其次,我想根据年份和 3 位数代码选择文件。
我过去做过类似的事情来使用正则表达式选择文件,其中字符串中只有一个数字,所以我使用
For( i = 1, i <= N Items( FileList ), i++,
FileList[i] = regex(FileList[i], "([0-9]+)", "\1")
);
但在这种情况下,我最终得到了“2021”、“2021”、...的列表
理想情况下,我最终会得到一个看起来像这样的列表
{"2021_027 ", "2021_027 ", "2021_028 ",
"2021_028 ", "2021_029 ", "2021_029 ",
"2021_038 ", "2021_038 ", "2021_040 ",
"2021_040 ", "2021_041 ", "2021_041 ",
"2021_042 ", "2021_042 ", "2021_043 ",
"2021_043 ", "2021_044 ", "2021_044 ",
"2021_045 ", "2021_045 ", "2021_046 ",
"2021_046 ", "2021_047 ", "2021_047 ",
"2021_048 ", "2021_048 ", "2021_049 ",
"2021_049 ", "2021_050 ", "2021_050 ",
"2021_051 ", "2021_051 ", "2021_052 ",
"2021_052 ", "2021_053 ", "2021_053 ",
"2021_054 ", "2021_054 ", "2021_055 ",
"2021_055 ", "2021_056 ", "2021_056 ",
"2021_057 ", "2021_057 ", "2021_058 ",
"2021_058 ", "2021_059 ", "2021_059 ",
"2021_060 ", "2021_060 ", "2021_061 ",
"2021_061 ", "2021_062 ", "2021_062 ",
"2021_063 ", "2021_063 ", "2021_064 ",
"2021_064 ", "2021_065 ", "2021_065 ",
"2021_067 "}然后我可以从该列表中选择我想要使用的文件。
另外,欢迎任何有关学习如何更好地正则表达式的提示。
谢谢你!
高级统计建模消费者和市场研究质量和工艺工程分享和交流结果回复:删除列表中包含单词的字符串三大优质解决方案:
@蒂埃里_S - 易于理解和维护
@乔治- 正则表达式替换的具体使用方式
@gzmorgan0 - 通过向后工作有效地从列表中删除
您可以混合搭配这些想法,以制定一个易于维护、高效且清楚地代表您正在解决的问题的理想解决方案。
回复:删除列表中包含单词的字符串这是另一种方法。我喜欢使用 RegexMatch(SourceStr, patStr) 函数。点星号 (.*) 类似于在 Like 数据库函数中使用 %。由于您希望从列表中删除项目,因此需要从列表末尾开始,否则索引会损坏。
Names Default to Here(1);
FileList = {"2021_abc_027_result.csv", "2021_abc_027_summary.csv", "2021_abc_028_result.csv",
"2021_abc_028_summary.csv", "2021_abc_029_result.csv", "2021_abc_029_summary.csv",
"2021_abc_038_result.csv", "2021_abc_038_summary.csv", "2021_abc_040_result.csv",
"2021_abc_040_summary.csv", "2021_abc_041_result.csv", "2021_abc_041_summary.csv",
"2021_abc_042_result.csv", "2021_abc_042_summary.csv", "2021_abc_043_result.csv",
"2021_abc_043_summary.csv", "2021_abc_044_result.csv", "2021_abc_044_summary.csv",
"2021_abc_045_result.csv", "2021_abc_045_summary.csv", "2021_abc_046_result.csv",
"2021_abc_046_summary.csv", "2021_abc_047_result.csv", "2021_abc_047_summary.csv",
"2021_abc_048_result.csv", "2021_abc_048_summary.csv", "2021_abc_049_result.csv",
"2021_abc_049_summary.csv", "2021_abc_050_result.csv", "2021_abc_050_summary.csv",
"2021_abc_051_result.csv", "2021_abc_051_summary.csv", "2021_abc_052_result.csv",
"2021_abc_052_summary.csv", "2021_abc_053_result.csv", "2021_abc_053_summary.csv",
"2021_abc_054_result.csv", "2021_abc_054_summary.csv", "2021_abc_055_result.csv",
"2021_abc_055_summary.csv", "2021_abc_056_result.csv", "2021_abc_056_summary.csv",
"2021_abc_057_result.csv", "2021_abc_057_summary.csv", "2021_abc_058_result.csv",
"2021_abc_058_summary.csv", "2021_abc_059_result.csv", "2021_abc_059_summary.csv",
"2021_abc_060_result.csv", "2021_abc_060_summary.csv", "2021_abc_061_result.csv",
"2021_abc_061_summary.csv", "2021_abc_062_result.csv", "2021_abc_062_summary.csv",
"2021_abc_063_result.csv", "2021_abc_063_summary.csv", "2021_abc_064_result.csv",
"2021_abc_064_summary.csv", "2021_abc_065_result.csv", "2021_abc_065_summary.csv",
"2021_abc_067_result.csv"};
patStr = "2021.*result.*";
For(i = nitems(FileList), i>=1, i--,
SourceStr = FileList[i] ;
ret = Try( Regex Match( SourceStr, patStr )[1], "" );
If( ret != SourceStr, RemoveFrom(FileList,i) );
); //end For i
Show(FileList);
回复:删除列表中包含单词的字符串这是一种正则表达式方法:
Names Default To Here( 1 );
Assign(
file_lst,
{"2021_abc_027_result.csv", "2021_abc_027_summary.csv", "2021_abc_028_result.csv", "2021_abc_028_summary.csv", "2021_abc_029_result.csv",
"2021_abc_029_summary.csv", "2021_abc_038_result.csv", "2021_abc_038_summary.csv", "2021_abc_040_result.csv", "2021_abc_040_summary.csv",
"2021_abc_041_result.csv", "2021_abc_041_summary.csv", "2021_abc_042_result.csv", "2021_abc_042_summary.csv", "2021_abc_043_result.csv",
"2021_abc_043_summary.csv", "2021_abc_044_result.csv", "2021_abc_044_summary.csv", "2021_abc_045_result.csv", "2021_abc_045_summary.csv",
"2021_abc_046_result.csv", "2021_abc_046_summary.csv", "2021_abc_047_result.csv", "2021_abc_047_summary.csv", "2021_abc_048_result.csv",
"2021_abc_048_summary.csv", "2021_abc_049_result.csv", "2021_abc_049_summary.csv", "2021_abc_050_result.csv", "2021_abc_050_summary.csv",
"2021_abc_051_result.csv", "2021_abc_051_summary.csv", "2021_abc_052_result.csv", "2021_abc_052_summary.csv", "2021_abc_053_result.csv",
"2021_abc_053_summary.csv", "2021_abc_054_result.csv", "2021_abc_054_summary.csv", "2021_abc_055_result.csv", "2021_abc_055_summary.csv",
"2021_abc_056_result.csv", "2021_abc_056_summary.csv", "2021_abc_057_result.csv", "2021_abc_057_summary.csv", "2021_abc_058_result.csv",
"2021_abc_058_summary.csv", "2021_abc_059_result.csv", "2021_abc_059_summary.csv", "2021_abc_060_result.csv", "2021_abc_060_summary.csv",
"2021_abc_061_result.csv", "2021_abc_061_summary.csv", "2021_abc_062_result.csv", "2021_abc_062_summary.csv", "2021_abc_063_result.csv",
"2021_abc_063_summary.csv", "2021_abc_064_result.csv", "2021_abc_064_summary.csv", "2021_abc_065_result.csv", "2021_abc_065_summary.csv",
"2021_abc_067_result.csv"}
);
For( i = 1, i <= N Items( file_lst ), i++,
print( eval(Regex( file_lst[i], "^([0-9]+)_([a-z]{3})_([0-9]{3}).*result", "Fullname: \0 Part1: \1 Part2: \2 Part3: \3" )) )
);回复:删除列表中包含单词的字符串你好,
这是解决您的问题的一种强力方法,它绕过了使用正则表达式的需要(我不太擅长这些)。
Names default to Here (1);
StartList = {"2021_abc_027_result.csv", "2021_abc_027_summary.csv", "2021_abc_028_result.csv",
"2021_abc_028_summary.csv", "2021_abc_029_result.csv", "2021_abc_029_summary.csv",
"2021_abc_038_result.csv", "2021_abc_038_summary.csv", "2021_abc_040_result.csv",
"2021_abc_040_summary.csv", "2021_abc_041_result.csv", "2021_abc_041_summary.csv",
"2021_abc_042_result.csv", "2021_abc_042_summary.csv", "2021_abc_043_result.csv",
"2021_abc_043_summary.csv", "2021_abc_044_result.csv", "2021_abc_044_summary.csv",
"2021_abc_045_result.csv", "2021_abc_045_summary.csv", "2021_abc_046_result.csv",
"2021_abc_046_summary.csv", "2021_abc_047_result.csv", "2021_abc_047_summary.csv",
"2021_abc_048_result.csv", "2021_abc_048_summary.csv", "2021_abc_049_result.csv",
"2021_abc_049_summary.csv", "2021_abc_050_result.csv", "2021_abc_050_summary.csv",
"2021_abc_051_result.csv", "2021_abc_051_summary.csv", "2021_abc_052_result.csv",
"2021_abc_052_summary.csv", "2021_abc_053_result.csv", "2021_abc_053_summary.csv",
"2021_abc_054_result.csv", "2021_abc_054_summary.csv", "2021_abc_055_result.csv",
"2021_abc_055_summary.csv", "2021_abc_056_result.csv", "2021_abc_056_summary.csv",
"2021_abc_057_result.csv", "2021_abc_057_summary.csv", "2021_abc_058_result.csv",
"2021_abc_058_summary.csv", "2021_abc_059_result.csv", "2021_abc_059_summary.csv",
"2021_abc_060_result.csv", "2021_abc_060_summary.csv", "2021_abc_061_result.csv",
"2021_abc_061_summary.csv", "2021_abc_062_result.csv", "2021_abc_062_summary.csv",
"2021_abc_063_result.csv", "2021_abc_063_summary.csv", "2021_abc_064_result.csv",
"2021_abc_064_summary.csv", "2021_abc_065_result.csv", "2021_abc_065_summary.csv",
"2021_abc_067_result.csv"};
ResultList = {};
For (i = 1, i <= N Items (StartList), i++,
if (contains (StartList [i], "result"), insert into (ResultList, StartList[i]))
);
Show (ResultList); // Yields a clean list with results only
FileList = {};
For (i= 1 , i <= N Items (ResultList), i++,
Insert into (FileList, Word (1, ResultList [i], "_") || "_" || Word (3, ResultList [i], "_"))
);
Show (FileList); // Yields the file Year and Numerical ID
然后,您可以使用该列表将其输入 ListBox 或使用 Contains () 函数直接检索相应的文件。
下次我将阅读更多有关正则表达式的内容。
最好的,
TS