在vim中用空格包围的匹配文本

时间:2011-07-19 19:44:06

标签: regex vim

我有一个包含这样的行的文件:

|   hello world   |       foo bar!   |

我希望能够匹配hello worldfoo bar!,所以我可以反过来说明两个短语而不关心短语和竖线字符之间的空格。

到目前为止,我有这个,但有一个不那么冗长的正则表达式会做同样的事情吗?

:s/| \+\(.*[^ ]\) \+| \+\(.*[^ ]\) \+|/| \2 | \1 |/g

谢谢!

2 个答案:

答案 0 :(得分:1)

如果你不关心它们之间的空白,为什么不保留呢?

:s/\(|[^|]*\)\(|[^|]*\)|/\2\1|/g

答案 1 :(得分:0)

你可以使用magic或非常神奇的旗帜来减少斜线,但这并没有多大帮助。

:s/\v\| +(.*[^ ]) +\| +(.*[^ ]) +\|/| \2 | \1 |/g

如果您注意到,您连续两次使用相同的正则表达式(\ | +(。* [^])+)。您可以将其与{2}一起使用以缩短它。