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