我想删除所有前导和尾随空格。除了用字符串中的单个空格替换多个空格,以便字符串中的所有单词完全由单个空格分隔。
我可以使用正则表达式的两次迭代并寻找单一正则表达式解决方案来实现此目的。
s/^\s+|\s+$//g
s/\s+/ /g
示例输入:
word1 word2 word3 word4
期望的输出:
word1 word2 word3 word4
如果你能帮助我解决这个问题,那将是件好事。
答案 0 :(得分:9)
您可以使用以下内容:
s/^\s+|\s+$|\s+(?=\s)//g
\s+(?=\s)
将匹配字符串中间的所有空格并留下一个空格。
答案 1 :(得分:3)
使用awk
echo " word1 word2 word3 word4 " | awk '{$1=$1}1'
word1 word2 word3 word4
此$1=$1
是集中所有内容的技巧。
您甚至可以使用
awk '$1=$1' file
但如果第一个字段为0
或0.0
则会失败
答案 2 :(得分:3)
在Javascript中,字符串原型有两种方法可以管理它:
str.trim().replace(/\s+/g, ' ')
str.trim()
将删除前导和尾随空格
str.replace(regex, replacement)
将返回一个新字符串(对原始str
无破坏性),其中regex
将与提供的字符串进行比较,匹配的第一个实例将替换为{{1然后返回整个新字符串。
需要注意的重要事项:replacement
的第一个参数不应该用引号封装。正则表达式用斜杠(.replace
)分隔,然后附加/regex/
表示全局替换(每个匹配的实例),而不是仅基于g
替换第一个或下一个实例(最初0,给出第一个实例)。您可以阅读有关lastIndex
以及我在第二个链接中提及的所有内容的更多信息。
示例:
lastIndex

在您的控制台中尝试此操作:
var str = ' 1 2 3 4 '
function trimReplace(str){
newStr = str.trim().replace(/\s+/g, ' ');
console.log(newStr);
}
trimReplace(str)
" 1 2 3 4"
_
正则表达式:kleene operators将帮助您了解用于匹配多个空格的正则表达式
正则表达式:helpful guide on regex and /g flag
Google:MDN string.protoype.trim()
Google:MDN string.prototype.replace()
答案 3 :(得分:2)
这可能适合你(GNU sed):
sed -r 's/((^)\s*(\S))|((\S)\s*($))|(\s)\s*/\2\3\5\6\7/g' file
或简单地说:
sed -r 's/(^\s*(\S))|((\S)\s*$)|(\s)\s*/\2\4\5/g file
答案 4 :(得分:0)
如果您使用的是UNIX,则可以利用shell的Word-splitting。 Bash示例使用下面的命令替换
STR=" word1 word2 word3 word4 "
z=$(echo $STR)
echo "$z"
word1 word2 word3 word4