Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
如何在vim中构建一个regexp来搜索不以“quot”开头的单词@&引用;?_Regex_Search_Vim - Fatal编程技术网

如何在vim中构建一个regexp来搜索不以“quot”开头的单词@&引用;?

如何在vim中构建一个regexp来搜索不以“quot”开头的单词@&引用;?,regex,search,vim,Regex,Search,Vim,我想从Twitter帖子构建的长文本文件中提取用户名。我试过这样的表达方式 :%s#\([^@].\{-}\) ##g :%s#\(\<[^@].\{-}\>\) ##g :%s#\([^@.{-}\)\g :%s\\(\\)\g 但它不起作用。我阅读了Vim的@文档,但据我所知,它适用于转义的@,而不是普通的@ 如何构建一个表达式来删除不以“@”开头的单词?您可以在vim中使用此正则表达式: @\@<!\<\w\+\> \@是在vim中使用反向查找的语法,它

我想从Twitter帖子构建的长文本文件中提取用户名。我试过这样的表达方式

:%s#\([^@].\{-}\) ##g
:%s#\(\<[^@].\{-}\>\) ##g
:%s#\([^@.{-}\)\g
:%s\\(\\)\g
但它不起作用。我阅读了Vim的
@
文档,但据我所知,它适用于转义的
@
,而不是普通的
@


如何构建一个表达式来删除不以“@”开头的单词?

您可以在vim中使用此正则表达式:

@\@<!\<\w\+\>

\@是在
vim
中使用反向查找的语法,它相当于
(?否则。

您可以在vim中使用此正则表达式:

@\@<!\<\w\+\>

\@是在
vim
中使用反向查找的语法,它相当于
(?否则。

您可以在vim中使用此正则表达式:

@\@<!\<\w\+\>

\@是在
vim
中使用反向查找的语法,它相当于
(?否则。

您可以在vim中使用此正则表达式:

@\@<!\<\w\+\>

\@是在
vim
中使用反向查找的语法,它相当于
(?否则。

不知道为什么要在vim中执行此操作。 我假设您有一个unix/linux操作系统,正如您提到的vim。 感谢您,我找到了以下解决方案:

grep -o -E '@\w+' twitterlog.txt > usernames.txt

不知道为什么要在vim中执行此操作。 我假设您有一个unix/linux操作系统,正如您提到的vim。 感谢您,我找到了以下解决方案:

grep -o -E '@\w+' twitterlog.txt > usernames.txt

不知道为什么要在vim中执行此操作。 我假设您有一个unix/linux操作系统,正如您提到的vim。 感谢您,我找到了以下解决方案:

grep -o -E '@\w+' twitterlog.txt > usernames.txt

不知道为什么要在vim中执行此操作。 我假设您有一个unix/linux操作系统,正如您提到的vim。 感谢您,我找到了以下解决方案:

grep -o -E '@\w+' twitterlog.txt > usernames.txt
您的问题是“如何删除与某些模式不匹配的所有内容?”

我想回答“如何捕获所有匹配项(并删除缓冲区的内容并粘贴匹配项)?”

为什么不“删除所有不匹配的模式”? Regex擅长匹配模式,但不匹配则更为棘手。当然,有时你可以使用“负面看”和“向后看”,但并非所有情况都是如此直接。精确匹配你想要的要容易得多。但是,如果你真的想这样做,我可以在不伤脑筋的情况下尽可能做到这一点:

:%s/.\&\(@\w*\)\@<![^@]//g
细节的荣耀
  • 通过
    let@a=”“
  • 通过
    @\w\+
    模式匹配twitter用户
  • 在替换的
    :s
    中使用
    \=
    执行表达式
  • 使用
    setreg()
    设置寄存器的值
  • 使用资本登记簿将追加而不是替换
  • 子匹配(0)
    生成匹配的内容
  • 使用
    'l'
    的第三个参数值指定逐行追加匹配项
  • 使用
    n
    标志将防止更改缓冲区(可选)
  • :%d
    删除黑洞寄存器中的整个缓冲区
  • :pu a
    将把a寄存器
  • :1d
    将删除空的第一行
好吧,那很好,但是打字太多了。。。 与
:%!grep-E-o'@\w+'
相比,它可能是一堆类型,但它是一个纯vim解决方案。如果这样更好,我们可以缩短为一行

:let @a = "" | %s/@\w\+/\=setreg('A', submatch(0), 'l')/n | %d_ | %pu a | 1d_
如果您必须定期执行类似操作,则可能不会。下面是一个快速的n'dirty命令,用于放入
~/.vimrc
文件:

" Extractomatic
" Replace the current buffer with each match on seperate line
" Usage:
"     :Extractomatic/pattern/
command! -nargs=+ Extractomatic
      \ let s:var = @a |
      \ let  @a = "" |
      \ %s<args>\=setreg('A', submatch(0), 'l')/n |
      \ %d_ |
      \ %pu a |
      \ 1d_ |
      \ let @a = s:var
您的问题是“如何删除与某些模式不匹配的所有内容?”

我想回答“如何捕获所有匹配项(并删除缓冲区的内容并粘贴匹配项)?”

为什么不“删除所有不匹配的模式”? Regex擅长匹配模式,但不匹配则更为棘手。当然,有时你可以使用“负面看”和“向后看”,但并非所有情况都是如此直接。精确匹配你想要的要容易得多。但是,如果你真的想这样做,我可以在不伤脑筋的情况下尽可能做到这一点:

:%s/.\&\(@\w*\)\@<![^@]//g
细节的荣耀
  • 通过
    let@a=”“
  • 通过
    @\w\+
    模式匹配twitter用户
  • 在替换的
    :s
    中使用
    \=
    执行表达式
  • 使用
    setreg()
    设置寄存器的值
  • 使用资本登记簿将追加而不是替换
  • 子匹配(0)
    生成匹配的内容
  • 使用
    'l'
    的第三个参数值指定逐行追加匹配项
  • 使用
    n
    标志将防止更改缓冲区(可选)
  • :%d
    删除黑洞寄存器中的整个缓冲区
  • :pu a
    将把a寄存器
  • :1d
    将删除空的第一行
好吧,那很好,但是打字太多了。。。 与
:%!grep-E-o'@\w+'
相比,它可能是一堆类型,但它是一个纯vim解决方案。如果这样更好,我们可以缩短为一行

:let @a = "" | %s/@\w\+/\=setreg('A', submatch(0), 'l')/n | %d_ | %pu a | 1d_
如果您必须定期执行类似操作,则可能不会。下面是一个快速的n'dirty命令,用于放入
~/.vimrc
文件:

" Extractomatic
" Replace the current buffer with each match on seperate line
" Usage:
"     :Extractomatic/pattern/
command! -nargs=+ Extractomatic
      \ let s:var = @a |
      \ let  @a = "" |
      \ %s<args>\=setreg('A', submatch(0), 'l')/n |
      \ %d_ |
      \ %pu a |
      \ 1d_ |
      \ let @a = s:var
您的问题是“如何删除与某些模式不匹配的所有内容?”

我想回答“如何捕获所有匹配项(并删除缓冲区的内容并粘贴匹配项)?”

为什么不“删除所有不匹配的模式”? Regex擅长匹配模式,但不匹配则更为棘手。当然,有时你可以使用“负面看”和“向后看”,但并非所有情况都是如此直接。精确匹配你想要的要容易得多。但是,如果你真的想这样做,我可以在不伤脑筋的情况下尽可能做到这一点:

:%s/.\&\(@\w*\)\@<![^@]//g
细节的荣耀
  • 通过
    let@a=”清除
    a
    寄存器