r - 仅提取字符串中最后一个数字后的空格后的字符
问题描述
我不太擅长使用正则表达式。我有一个字符串向量。我想在最后一个数字后面的空格之后提取所有内容。我已经检查了各种其他 SO 帖子,但我尝试过的所有内容都会破坏字符串。
我试过直接提取我想要的文本以及提取我不想要的文本。我两方面都失败了。
这是一个示例向量:
c("54 ABC, efg xyz", "ABC 08 abcdef ghijkl", "ABC 01-02 ghijkl")
这是所需的输出
c("ABC, efg xyz", "abcdef ghijkl", "ghijkl")
这是我尝试过的:
library(dplyr)
library(stringr)
c("54 ABC, efg xyz", "ABC 08 abcdef ghijkl", "ABC 01-02 ghijkl") %>%
str_replace("[^[:digit:]] +", "")
[1] "54 ABCefg xyz" "AB08 abcdef ghijkl" "AB01-02 ghijkl"
我试着把它分成几个步骤:
c("54 ABC, efg xyz", "ABC 08 abcdef ghijkl", "ABC 01-02 ghijkl") %>%
str_replace_all("^[:digit:]+\\s", "") %>%
str_replace_all("ABC ", "") %>%
str_replace_all("^[:digit:]+\\s", "") %>%
str_replace_all(".*? ", "")
[1] "xyz" "ghijkl" "ghijkl"
还有其他一些尝试,但不值得发布。
我相信在我花了几个小时无处可去之后,有人能够轻松解决这个问题。
解决方案
我们可以使用它sub
来执行此操作,即匹配字符 ( .*
) 直到一个或多个数字 ( \\d+
) 后跟一个或多个空格 ( \\s+
) 并替换为空白 ( ""
)
sub(".*\\d+\\s+", "", v1)
-输出
[1] "ABC, efg xyz" "abcdef ghijkl" "ghijkl"
或使用str_remove
library(stringr)
str_remove(v1, ".*\\d+\\s+")
[1] "ABC, efg xyz" "abcdef ghijkl" "ghijkl"
数据
v1 <- c("54 ABC, efg xyz", "ABC 08 abcdef ghijkl", "ABC 01-02 ghijkl")
推荐阅读
- python - 具有“开始于”功能的 pyaudio 简单音频播放器
- discord.js - 不和谐.js | TypeError:无法读取未定义的属性“0”
- node.js - For循环向midi文件添加注释,toneJS
- javascript - 尽管启用了 CORS,但 express js api Access-Control-Allow-Origin 上的 CORS
- machine-learning - ValueError:“input_length”为 47,但接收到的输入具有形状(无、47、18704)
- visual-c++ - MSVC上单精度浮点指数的最大值是多少?
- javascript - 将弹出窗口滚动到屏幕外
- r - ggplot - R - 冲积图 - 条形之间的空间更大
- mysql - MySQL binlogs 到 BigQuery,什么是复制的好设计?
- c# - Xamarin MainPage 错误:当前上下文中不存在名称