删除REGEX表达式右侧的所有内容

axzmvihb  于 2022-11-26  发布在  其他
关注(0)|答案(2)|浏览(127)

我有如下数据:

my_data = c("red A1B 5L2  101", "blue A1C 5L8  10872", "Green A1D 5L5  100003" )

从每个字符串的右侧开始,我想删除数字以及数字前的空格。

最后的结果将如下所示:

[1] "red A1B 5L2"   "blue A1C 5L8"  "Green A1D 5L5"

我知道每个字符串中都有一个正则表达式模式,其格式如下:'(([A-Z] ?[0-9]){3})|.', '\\1'
因此,我想确定这个正则表达式模式结束的位置和字符串结束的位置--然后我可以删除这两个位置之间的空格并获得所需的结果。
我找到了这个链接,它展示了如何删除字符串中出现在某个模式(https://datascience.stackexchange.com/questions/8922/removing-strings-after-a-certain-character-in-a-given-text)左侧或右侧的所有字符。我尝试将这里提供的逻辑应用到我的示例中:

gsub("(([A-Z] ?[0-9]){3})|.', '\\1.*","",my_data)

但这却产生了相反的结果!

[1] "red   101"      "blue   10872"   "Green   100003"

有人能告诉我如何解决这个问题吗?

f1tvaqid

f1tvaqid1#

我们可以在这里使用sub()

my_data <- c("red A1B 5L2  101", "blue A1C 5L8  10872", "Green A1D 5L5  100003" )
output <- sub("\\s+\\d+$", "", my_data)
output

[1] "red A1B 5L2"   "blue A1C 5L8"  "Green A1D 5L5"

这里使用的正则表达式模式是\s+\d+$,它匹配字符串末尾的一个或多个空格字符,后跟一个或多个数字。

pu3pd22g

pu3pd22g2#

base R中使用trimws

trimws(my_data, whitespace = "\\s+\\S+")
[1] "red A1B 5L2"   "blue A1C 5L8"  "Green A1D 5L5"

相关问题