R 如何仅保留以特定字母结尾的事件?
我想保留字符串中仅以特定字母(比如“a”)结尾的所有事件。我不是在处理由不同元素组成的向量,而是一个字符串,其出现处由空格分隔 以下是数据:R 如何仅保留以特定字母结尾的事件?,r,regex,string,stringr,R,Regex,String,Stringr,我想保留字符串中仅以特定字母(比如“a”)结尾的所有事件。我不是在处理由不同元素组成的向量,而是一个字符串,其出现处由空格分隔 以下是数据: have="5a 4a 8a 10a 3a 5m 10m 7a 8p 11s 5s 4h 24h" want="5a 4a 8a 10a 3a 7a" 以下是一些代码: gsub("([A-Z]|[0-9])([m|p|h|s])","", have) gsub("\\w+m|p|h|s *", "", have) 应用其中一个gsub代码后,我得
have="5a 4a 8a 10a 3a 5m 10m 7a 8p 11s 5s 4h 24h"
want="5a 4a 8a 10a 3a 7a"
以下是一些代码:
gsub("([A-Z]|[0-9])([m|p|h|s])","", have)
gsub("\\w+m|p|h|s *", "", have)
应用其中一个gsub代码后,我得到了两种类型的信息(字母数字后跟“a”和纯数字)
但我仍然需要清理,所以我只得到以“a”结尾的事件。你有什么想法吗?你可以做:
trimws(gsub("([A-Z]|[0-9]{1,})([b-z])","",have))
[1] "5a 4a 8a 10a 3a 7a"
要删除多余的空间,请执行以下操作:
gsub("\\s{2,}"," ",
trimws(gsub("([A-Z]|[0-9]{1,})([b-z])","",have)))
#[1] "5a 4a 8a 10a 3a 7a"
你可以做:
trimws(gsub("([A-Z]|[0-9]{1,})([b-z])","",have))
[1] "5a 4a 8a 10a 3a 7a"
要删除多余的空间,请执行以下操作:
gsub("\\s{2,}"," ",
trimws(gsub("([A-Z]|[0-9]{1,})([b-z])","",have)))
#[1] "5a 4a 8a 10a 3a 7a"
您可以使用此模式并替换为空字符串:
[ ]?[a-z0-9]+[mphs]
可选空格(方括号仅为清晰起见)[]?
字符类,匹配1+次a-z 0-9[a-z0-9]+
字符类,匹配m、p h或s[mphs]
have="5a 4a 8a 10a 3a 5m 10m 7a 8p 11s 5s 4h 24h"
gsub(" ?[a-z0-9]+[mphs]","", have)
结果
[1] "5a 4a 8a 10a 3a 7a"
|
或许您可以将它们匹配起来:
\b\da\b
单词边界\b
一个数字\d
匹配aa
单词边界\b
请注意,在
[m | p | h | s]
中,
并不表示或
,而是一个
字符,也可以写成[mphs |]
,您可以使用此模式并替换为空字符串:
[ ]?[a-z0-9]+[mphs]
可选空格(方括号仅为清晰起见)[]?
字符类,匹配1+次a-z 0-9[a-z0-9]+
字符类,匹配m、p h或s[mphs]
have="5a 4a 8a 10a 3a 5m 10m 7a 8p 11s 5s 4h 24h"
gsub(" ?[a-z0-9]+[mphs]","", have)
结果
[1] "5a 4a 8a 10a 3a 7a"
|
或许您可以将它们匹配起来:
\b\da\b
单词边界\b
一个数字\d
匹配aa
单词边界\b
请注意,在
[m | p | h | s]
中,
不是或
而是
字符,也可以写成[mphs |]
您可以将其拆分为单词,使用grep
识别以a结尾的单词,然后将它们粘贴在一起
Words = strsplit(have, "\\W+")[[1]]
paste(grep("a$", Words, value=T), collapse=" ")
[1] "5a 4a 8a 10a 3a 7a"
您可以将其拆分为单词,使用
grep
识别以a结尾的单词,然后将它们重新粘贴在一起
Words = strsplit(have, "\\W+")[[1]]
paste(grep("a$", Words, value=T), collapse=" ")
[1] "5a 4a 8a 10a 3a 7a"
或者,更长但更简单的regexp,将其转换为向量,然后再转换回字符串
have_string <- "5a 4a 8a 10a 3a 5m 10m 7a 8p 11s 5s 4h 24h"
have_vector <- unlist(strsplit(have_string," "))
library(stringr)
want_vector <- have_vector[str_detect(have_vector, ".*?a$")]
want_string <- paste(want_vector, sep = " ", collapse = " ")
使用_string或者,更长但更简单的regexp,将其转换为向量,然后再转换回字符串
have_string <- "5a 4a 8a 10a 3a 5m 10m 7a 8p 11s 5s 4h 24h"
have_vector <- unlist(strsplit(have_string," "))
library(stringr)
want_vector <- have_vector[str_detect(have_vector, ".*?a$")]
want_string <- paste(want_vector, sep = " ", collapse = " ")
让\u字符串尝试此模式\b\da\b
请参阅尝试此模式\b\da\b
请参阅谢谢!我可以从哪种资源学习这样做?你到底是怎么得到“[a-z0-9]+[mphs]”的?@aguiot这是一个可以匹配1倍以上所列任何一个参数的a。字符类没有或|
。您可以将其编写为[mphs |]
,它还将匹配管道
。谢谢!我可以从哪种资源学习这样做?你到底是怎么得到“[a-z0-9]+[mphs]”的?@aguiot这是一个可以匹配1倍以上所列任何一个参数的a。字符类没有或|
。您可以将其编写为[mphs |]
,并且它还将匹配管道
。