r - 无法用我的正则表达式提取星号
问题描述
我有一个字符串:*** CONNECTION WAS MADE IN MESSAGE ***
我想用正则表达式提取该字符串中的三个第一个单词。但是当我尝试这个时:
\\w+ \\w+(:| \\w+)
它提取了这个: CONNECTION WAS MADE,而不是 *** CONNECTION WAS
我在这里做错了什么?如何解决?我应该使用什么来代替 \w,以便提取字符串和星号?
解决方案
我们可以使用\\S+
as 模式来匹配一个或多个非空白字符
library(stringr)
str_extract(str1, "\\S+\\s+\\S+\\s+\\S+")
#[1] "*** CONNECTION WAS"
str_extract(str2, "\\S+\\s+\\S+\\s+\\S+")
#[1] "some random example"
str_extract(str3, "\\S+\\s+\\S+\\s+\\S+")
#[1] "response message: <?xml"
根据?regex
符号 \w 匹配“单词”字符([[:alnum:]_] 的同义词,扩展名)
因此,它只匹配字母数字字符以及_
和 不*
。此外,*
in 正则表达式暗示表示零或更多的元字符
数据
str1 <- "*** CONNECTION WAS MADE IN MESSAGE ***"
str2 <- "some random example message"
str3 <- 'response message: <?xml version="1.0" encoding'