Vim:替换行中的所有非字母非数字和非"-"字符



我最近开始使用vim,并花了一些时间尝试解决这个问题。 所以我有一个字符串,例如"I'm 20 years old - and you?"我需要从这个'I_m_20_years_old_-_and_you_'

在 java 中,像这样[^a-Z0-9-]+似乎非常简单,但我无法在 Vim 中获得类似的正则表达式 我已经尝试过:26s/(W)/_/g但它也删除了所有"-"。 如何在正则表达式中添加"而不是 -"?

提前感谢!

您的:26s/[^a-Z0-9-]+/_/g尝试的问题是a-Z,这不是一个有效的范围。应该是a-zA-Z.

(A-z会"工作",但如果你看一下ASCII表,它也包括[]^_`,而不仅仅是字母。

下一个问题是+不是 vim 中的正则表达式元字符(至少默认情况下不是(。[^a-zA-Z0-9-]+会寻找一个非字母数字的非-字符,后跟一个文字+。它需要+

这给了我们s/[^a-zA-Z0-9-]+/_/g,这有效。

根据 http://vimregex.com/应该是这样的

s/[^a-zA-Z0-9-]+/_/g

转义-+

:s/[^a-zA-Z0-9-]+/_/g

最新更新