我最近开始使用vim
,并做了一些尝试来解决该问题。
所以我有一个字符串,例如"I'm 20 years old - and you?"
,我需要从这个'I_m_20_years_old_-_and_you_'
在Java中,像这样的[^a-Z0-9\-]+
似乎很简单,但是我无法在Vim中获得类似正则表达式的工作
我已经尝试过:26s/\(\W\)/_/g
,但是它也删除了所有的'-'。
如何在正则表达式中添加“而不是-”?
谢谢!
答案 0 :(得分:3)
您尝试:26s/[^a-Z0-9-]+/_/g
的问题是a-Z
,这不是有效范围。应该是a-zA-Z
。
({A-z
会“起作用”,但是如果您查看ASCII table,它还会包含[\]^_`
,而不仅仅是字母。)
下一个问题是+
不是vim中的正则表达式元字符(至少不是默认情况下)。 [^a-zA-Z0-9-]+
会寻找一个非字母数字的非-
字符,后跟原义的+
。它必须改为\+
。
这使我们s/[^a-zA-Z0-9-]\+/_/g
有效。
答案 1 :(得分:2)
根据http://vimregex.com/,应该是这样
s/[^a-zA-Z0-9-]\+/_/g
答案 2 :(得分:0)
转义-
和+
:
:s/[^a-zA-Z0-9\-]\+/_/g