示例字符串:
This is "a" test
This & test
This test string-has more words
在上面的每个例子中,我都有不同长度的单词串。这些字符串中的每一个后跟一系列空格,之后没有任何内容。
我的应用程序在正则表达式的各个部分周围使用()
,只在必要时才返回匹配模式的那部分。
我需要一个正则表达式,无论长度如何都会返回完整的字符串,减去末尾的空格。
我的当前时间是(.*)\s{1,}$|(.*\S)$
如果字符串末尾有0个空格或字符串末尾有1个空格,但是有2个或更多个空格,并且空格包含在输出中,则此方法有效。
答案 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
将最终字符强制为非空白字符。
希望这对于以后该线程的读者很有用。