R 如何提取符号和空格之间的字符串?
我正在尝试提取文本聊天中标记的用户名,例如“@Jack@Marie Hi here!” 我试图在@和空格的组合上这样做,但我无法让正则表达式匹配非贪婪(或者至少我认为这是错误的):R 如何提取符号和空格之间的字符串?,r,regex,stringr,R,Regex,Stringr,我正在尝试提取文本聊天中标记的用户名,例如“@Jack@Marie Hi here!” 我试图在@和空格的组合上这样做,但我无法让正则表达式匹配非贪婪(或者至少我认为这是错误的): 库(stringr) str_extract(string=“@这是我想要提取的内容”,pattern=“(?您可以使您的正则表达式不贪婪: 或者,如果您只想在@符号后捕获“This”,您可以这样尝试,只需使用正向查找: 解释 正向查找(?这里是一种非正则表达式方法,或者说是最小正则表达式方法,因为grep通过
库(stringr)
str_extract(string=“@这是我想要提取的内容”,pattern=“(?您可以使您的正则表达式不贪婪:
或者,如果您只想在@
符号后捕获“This”,您可以这样尝试,只需使用正向查找:
解释
- 正向查找
(?这里是一种非正则表达式方法,或者说是最小正则表达式方法,因为grep
通过正则表达式引擎检测@
grep('@', strsplit(x, ' ')[[1]], value = TRUE)
#[1] "@This"
或者为了避免strsplit
,我们可以使用扫描
(取自),即
正则表达式的中心部分((.*)
)是任何字符的序列
相反,您应该查找除空白以外的字符序列
(\S+
)或单词字符(\w+
)
还要注意,我将*
更改为+
,因为您可能不感兴趣
在任何空字符序列中
还要捕获在源中具有“last”位置的名称
字符串,正则表达式的最后一部分应该不仅匹配一个序列
的空格字符,但也是字符串的结尾,所以更改
(?=\\s+)
至(?=\\s+)
最后一句话:实际上你不需要括号
“中心”部分
总之,整个正则表达式可以是这样的:
(?<=@)\w+(?=\s+|$)
(?
grep('@', scan(textConnection(x), " "), value=TRUE)
#Read 7 items
#[1] "@This"
(?<=@)\w+(?=\s+|$)