【发布时间】:2020-10-21 13:54:02
【问题描述】:
假设我有以下字符串:
string <- c(
"DATE_OF_BIRTH_B1",
"HEIGHT_BABY2",
"WEIGHT_BABY_3",
"OTHER_CONDITION_4",
"OTHER_OPERATION_5"
)
如何在gsub() 中使用正则表达式来提取:
- 除尾随下划线外的所有内容,直到前三个字符串中的数字后缀;
- 最后两个字符串中没有任何内容。
换句话说,我预期的gsub() 输出是:
"DATE_OF_BIRTH_B", "HEIGHT_BABY", "WEIGHT_BABY"
我设法使用gsub("(.+_B[A-Z]*)_?[0-9]", "\\1", string) 从前三个字符串中提取所需的子字符串,但它未能排除最后两个字符串。
任何人都可以帮助纠正和改进我的正则表达式,并提供一些解释吗?非常感谢!
【问题讨论】:
-
您要排除的字符串是否具有某种公共性?否则,我看不出您通常如何将它们排除在外。在您的示例中,您可以例如只过滤其他。但类似的东西需要存在
-
使用与
.+的交替完成:sub("(.+_B[A-Z]*)_?[0-9]|.+", "\\1", string)