如何匹配R中的字符串和空格

Posted

技术标签:

【中文标题】如何匹配R中的字符串和空格【英文标题】:How to match a string and white space in R 【发布时间】:2016-11-18 10:48:42 【问题描述】:

我有一个数据框,其列的值如下:

“平均 18.24”“错误 23.34”。我的目标是替换这些文本和后续空格。在 R 中。任何机构都可以帮助我使用正则表达式模式来做到这一点吗?

我可以使用 [A-Z] 成功地做到这一点。但我无法结合空白。 [A-Z][[:space:]] 不走运。 感谢您的帮助。

【问题讨论】:

如您所见,您失败了,因为[A-Z] 不匹配小写字母,并且[A-Z] 没有+* 匹配1 个符号。后跟+匹配1个或多个字母,*匹配0个或多个。 感谢您的帮助。我对正则表达式的了解很原始。 很高兴my solution 提供帮助,请考虑接受。 【参考方案1】:

我们可以使用sub。使用模式\\D+ 匹配所有非数字字符,然后在替换中使用'' 删除这些字符。

sub("\\D+", '', v2)
#[1] "18.24" "23.34"

或者匹配一个或多个单词字符后跟一个或多个空格并替换为''

 sub("\\w+\\s+", "", v2)
 #[1] "18.24" "23.34"

或者如果我们使用stringr

library(stringr)
word(v2, 2)
#[1] "18.24" "23.34"

数据

v2 <- c("Average 18.24" ,"Error 23.34")

【讨论】:

word() sol ... :) 感谢您的解释。它帮助我解决了我的错误【参考方案2】:

您可以使用量词并将a-z 添加到模式(以及^ 锚点)

你可以使用

"^\\S+\\s+"
"^[a-zA-Z]+[[:space:]]+"

见regex demo

R demo:

> b <- c("Average 18.24", "Error 23.34")
> sub("^[A-Za-z]+[[:space:]]+", "", b)
> ## or sub("^\\S+\\s+", "", b)
[1] "18.24" "23.34"

详情

^ - 字符串开头 [A-Za-z]+ - 一个或多个字母(替换为 \\S+ 以匹配 1 个或多个非空格) [[:space:]]+ - 1+ 个空格(或\\s+ 将匹配 1 个或多个空格)

【讨论】:

以上是关于如何匹配R中的字符串和空格的主要内容,如果未能解决你的问题,请参考以下文章

如何用正则表达式匹配连字符?

如何删除字符串中的所有空格和 n r?

如何在 Python 3.10 中的匹配情况下获取带空格的字符串

当在其中一个字符串中插入空格时匹配两个字符串中的元素

正则表达式如何匹配换行符

JS问题,去掉字符串的前后空格