删除字符串中的前导,尾随和多个空格

时间:2013-09-26 05:31:03

标签: regex perl sed

我想删除所有前导和尾随空格。除了用字符串中的单个空格替换多个空格,以便字符串中的所有单词完全由单个空格分隔。

我可以使用正则表达式的两次迭代并寻找单一正则表达式解决方案来实现此目的。

s/^\s+|\s+$//g
s/\s+/ /g

示例输入:

   word1   word2 word3     word4    

期望的输出:

word1 word2 word3 word4

如果你能帮助我解决这个问题,那将是件好事。

5 个答案:

答案 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

但如果第一个字段为00.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