正则表达式从未知长度字符串的末尾修剪空格

时间:2016-06-27 23:22:31

标签: regex pattern-matching

示例字符串:

This is "a"  test        
This & test         
This test string-has more words     

在上面的每个例子中,我都有不同长度的单词串。这些字符串中的每一个后跟一系列空格,之后没有任何内容。

我的应用程序在正则表达式的各个部分周围使用(),只在必要时才返回匹配模式的那部分。

我需要一个正则表达式,无论长度如何都会返回完整的字符串,减去末尾的空格。

我的当前时间是(.*)\s{1,}$|(.*\S)$ 如果字符串末尾有0个空格或字符串末尾有1个空格,但是有2个或更多个空格,并且空格包含在输出中,则此方法有效。

6 个答案:

答案 0 :(得分:2)

你的解释太小了。我不知道您想使用哪种语言,但我建议您使用 trim 功能从字符串的开头和结尾删除任何空格。但如果你坚持使用正则表达式,这里有一个正则表达式:

/^[^ ][\w\W ]*[^ ]/

它会从字符串的开头和结尾删除一个或多个空格 它支持除空格之外的任何正常字符。如果您需要更多限制,可以操作\ w \ W语句。 如果上面的表达中有错误,请告诉我。

答案 1 :(得分:1)

如果您需要正则表达式来执行此操作: ^\s*(\S(.*\S)?)\s*$

删除任何数量的空格直到非空白字符,然后在截断所有尾随空格之前,先吃掉任意数量的字符,直到最后一个非空格。还处理单个字符串。与空字符串不匹配。

答案 2 :(得分:1)

这是一个真正有效的方法。 (在javascript中测试)

/^[\s\S]*?(?= *$)/

打破其他答案的特殊情况:

  • 仅包含空格的字符串
  • 空字符串
  • 包含换行符的字符串

说明:

^ - start of string
[\s\S]*? - match 0 or more (but as few as possible) of any character
(?= - after the match, the string must contain:
 * - 0 or more spaces
$ - and the end of the string
)

答案 3 :(得分:0)

此代码似乎有效:.*\S

这会删除前导和尾随空格:\S.*\S

答案 4 :(得分:0)

以下正则表达式将仅在字符串的末尾修剪空格:

\s+$/g

说明:

  • \s+$:=检查字符串的结尾是否连续有任意数量的空白字符
  • g:=搜索多个匹配项

类似地,以下正则表达式还将在字符串的开头和结尾处修剪空格:

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

说明:

  • ^\s+:=检查字符串的开头是否连续包含任意数量的空白字符
  • \s+$:=检查字符串的结尾是否连续有任意数量的空白字符
  • |:=“或”,检查是否存在^\s+\s+$这两个模式中的任何一个
  • g:=搜索多个匹配项

答案 5 :(得分:0)

我尝试了上述几种解决方案,但找不到适合任何字符串的解决方案,包括在引号中包含换行符的字符串。甚至12Me12的解决方案也无法正常工作。我使用的是 Swift 5.2 NSRegularExpression

我找到了一个新的解决方案,它似乎对于单行字符串和多行字符串都可以正常工作-甚至在引号内包括新行,这都将被忽略。

我使用的正则表达式为"\S[\s\S]*\S"

例如,它将正确修剪以下字符串(请注意开头的多余空格):

  {
  "age" : 68,
  "hobbies" : [
    "cooking",
    "guitar"
  ],
  "height" : 175
}

单行也将被正确修剪。在以下字符串中:

Trim le please!

正则表达式将匹配:

Trim le please!

说明

因此,当我们可以匹配任何空白字符或非空白字符时,我们要匹配第一个非空字符:\S。点.似乎不匹配空格,因此我们必须指定[\s\S]*来匹配空格和非空格。最后,我们再次使用\S将最终字符强制为非空白字符。

希望这对于以后该线程的读者很有用。