我正在尝试使用under-bar替换字符串中的空格。凭借我有限的编码经验,我想出了这个 -
s/\b[ ]\D/_/g
此命令用于查找我的文件的所有相应选择,但是它会替换空格和前进字符而不是空格。我怎样才能确保它只替换空格而不添加其他字符? 另外,我不希望这会影响数字字符(因此\ D)。
答案 0 :(得分:1)
正则表达式\b[ ]\D
(顺便说一下,也可以写成\b \D
)匹配空格和下面的非数字字符,这样就用下划线代替了。
有两个(嗯,还有更多,但这两个是直截了当的)在Perl中解决这个问题的方法:
使用捕获组和后退参考:
s/\b (\D)/_\1/g
此处正则表达式仍将匹配空格和非数字字符,但非数字字符将被记住为\1
并用作替换的一部分。
使用先行的零长度断言:
s/\b (?=\D)/_/g
(?=\D)
匹配空字符串if(且仅当)后跟匹配\D
的字符串,因此非数字字符不再是匹配的一部分,不会被替换。
附录顺便说一下,我怀疑您打算使用\b\D
而不仅仅是\D
。 \D
匹配空格(因为它们不是数字),因此
$ echo 'foo 123 bar baz qux' | perl -pe 's/\b (?=\D)/_/g'
foo 123_bar_ baz_qux
而不是
$ echo 'foo 123 bar baz qux' | perl -pe 's/\b (?=\b\D)/_/g'
foo 123_bar baz_qux
答案 1 :(得分:-2)
尝试 S / \ S / _ /克
\ s是匹配所有空格的字符。 如果您担心邻接空间,请使用\ s + +表示1个或多个空白字符。