RegEx - 删除前一个&匹配内容时尾随空格

时间:2013-01-25 08:44:27

标签: regex

我想尝试构建一个RegEx语句,该语句将从字符串中删除任何预先停止或尾随的空格(但不保留字符串中包含的任何内容),同时还匹配所选格式。例如,字符串不能超过20个字符,可以包含a-zA-Z0-9中的任何字符以及下划线和连字符。但最重要的是,它必须修剪或忽略在字符串的开头或结尾处找到的任何空格,所以:

正确: "度过愉快的一天"

不正确: "祝他们度过愉快的一天。

我尝试了很多不同的方法,但不幸的是到目前为止我还没有能够提出一个完全符合我想要的公式。谁能帮助我使用合适的RegEx? (这是RegEx的最简单形式,而不是特定于平台的。)

5 个答案:

答案 0 :(得分:4)

搜索此模式:

^\s*(.*?)\s*$

替换为这个:

\1

答案 1 :(得分:0)

从你的例子看来,字符串中间也允许使用空格,所以试试这个

^((([a-zA-Z0-9\-_][a-zA-Z0-9\-_ ]{0,18}?[a-zA-Z0-9\-_]))|([a-zA-Z0-9\-_]))$

匹配的任何内容都是正确的。

模式中的or部分用于支持单个字符句子。

答案 2 :(得分:0)

这个应该符合您的需求:

^\S[\w\s-]{0,18}\S$

18是字符串的maxlength - 2,因为两个\S将匹配任何非空白字符。例如,在这种情况下,如果字符串的长度高于20字符,则字符串将不匹配。此外,如果字符串长度低于2字符,则字符串将不匹配,因为上述约束相同。

答案 3 :(得分:0)

使用此正则表达式^\S((.{0,18}\S)|)$

^以字符串

开头

\S非空格符号

(.{0,18}\S)?末尾的任何符号和非空格符号(0-19个符号)

|

$字符串结尾

答案 4 :(得分:0)

以下是使用sed

的示例
echo "  Have a nice day  "|sed -E "s/^ *([^ ]+.*[^ ]+) +$/\\1/"