从正则表达式模式中删除一些单词/字符串

Posted

技术标签:

【中文标题】从正则表达式模式中删除一些单词/字符串【英文标题】:Remove some word/string from a regular expression pattern 【发布时间】:2022-01-13 00:29:38 【问题描述】:

我有一个具有以下值的向量:

list <- c("test_data", "train_data", "random_forest_output", "xgboost_output", "light_gbm_output", "all_output", "all_output_final")

我需要选择所有包含"output" 单词的变量,但是对于值"all_output""all_output_final",我只需要选择"all_output_final"。 也就是说,我需要得到一个这样的列表:

new_list <- c("random_forest_output", "xgboost_output", "light_gbm_output", "all_output_final")

可以用正则表达式实现吗?

【问题讨论】:

【参考方案1】:

首先,调用数据对象list 会误导其他用户。一方面list 是一个重要的R 函数,另一方面您的对象“列表”不是R 列表。也就是说,使用从正则表达式函数grepl 返回的逻辑值很容易通过使用 &!通过包含字符串结尾 "$" 来消除不需要的模式,该模式表示为正则表达式。

list[ grepl("output", list)&!grepl("^all_output$",list)]
[1] "random_forest_output" "xgboost_output"       "light_gbm_output"     "all_output_final"  

您可以将 &amp;!(和 NOT)表达式解读为“...所有前面的内容,但没有以下匹配项”

【讨论】:

以上是关于从正则表达式模式中删除一些单词/字符串的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式删除第一个单词并使用 c# 将第二个单词的第一个字符大写

正则表达式模式单个和多个相同字符的实例

用于匹配单词的 javascript 正则表达式模式,具有自定义单词边界

正则表达式用来根据某种匹配模式寻找字符串中的某些单词。

使用正则表达式从文本中删除连续重复的单词并显示新文本

用于获取仅包含模式列表中单词的字符串的正则表达式?