Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 如何提取符号和空格之间的字符串?_R_Regex_Stringr - Fatal编程技术网

R 如何提取符号和空格之间的字符串?

R 如何提取符号和空格之间的字符串?,r,regex,stringr,R,Regex,Stringr,我正在尝试提取文本聊天中标记的用户名,例如“@Jack@Marie Hi here!” 我试图在@和空格的组合上这样做,但我无法让正则表达式匹配非贪婪(或者至少我认为这是错误的): 库(stringr) str_extract(string=“@这是我想要提取的内容”,pattern=“(?您可以使您的正则表达式不贪婪: 或者,如果您只想在@符号后捕获“This”,您可以这样尝试,只需使用正向查找: 解释 正向查找(?这里是一种非正则表达式方法,或者说是最小正则表达式方法,因为grep通过

我正在尝试提取文本聊天中标记的用户名,例如“@Jack@Marie Hi here!”

我试图在@和空格的组合上这样做,但我无法让正则表达式匹配非贪婪(或者至少我认为这是错误的):

库(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+|$)