首页 > 解决方案 > 无法用我的正则表达式提取星号

问题描述

我有一个字符串:*** CONNECTION WAS MADE IN MESSAGE ***

我想用正则表达式提取该字符串中的三个第一个单词。但是当我尝试这个时:

\\w+ \\w+(:| \\w+)

它提取了这个: CONNECTION WAS MADE,而不是 *** CONNECTION WAS

我在这里做错了什么?如何解决?我应该使用什么来代替 \w,以便提取字符串和星号?

标签: rregex

解决方案


我们可以使用\\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'

推荐阅读