我目前正在尝试破解 R 中看似简单的问题,但不知何故我无法找到使用 gsub
解决此问题的方法。 , str_match()
或其他一些 rgex
- 相关功能。谁能帮我解决这个问题?
问题 假设我有一个特定长度的列向量(比如 100)。向量中的每个元素都具有 [string]_[string+number]_[someinfo]
的形式.现在,我只想提取每个元素的第一部分,即 [string]_[string+number]
. [string]_[string+number]
中字符数的潜在上限, 不包括 _
, 可以在 8 到 20 之间的任何位置,但没有固定的长度。我如何使用某些类型的 rgex
在 R 中执行此操作的表达式?
x = c('XY_ABCD101_12_ACE', 'XZ_ACC122_100_BAN', 'XT_AAEEE100_12345_ABC', 'XKY_BBAAUUU124_100')
期望的输出。
x1 = c('XY_ABCD101', 'XZ_ACC122', 'XT_AAEEE100', 'XKY_BBAAUUU124')
最佳答案
我们可以使用 stringr
包中的 str_extract
和匹配的正则表达式来删除第二个下划线之后的所有内容:
library(stringr)
str_extract(x, "[^_]*_[^_]*")
[1] "XY_ABCD101" "XZ_ACC122" "XT_AAEEE100" "XKY_BBAAUUU124"
https://stackoverflow.com/questions/72904012/