我一直在尝试构建一个匹配尾随空格的ruby正则表达式 - 但不是缩进占位符 - 所以我可以将它们格式化。
我有这个/\b[\t ]+$/
并且它正在努力,直到我意识到它仅在行结束时才有效[a-zA-Z]
。 :-(所以我把它演变成了这个/(?!^[\t ]+)[\t ]+$/
,看起来它变得越来越好了,但它仍然无法正常工作。我花了好几个小时试图让它工作无济于事。请帮助。 / p>
这里有一些文本测试,因此很容易投入Rubular,但是缩进行被剥离,所以它需要一些空格和/或制表符。第3行和第3行4有空格,在第3-5,7,9行不应该匹配。
some test test
some test test
some other test (text)
some other test (text)
likely here{ dfdf }
likely here{ dfdf }
and this ;
and this ;
或者,是否有更简单/更优雅的方法来做到这一点?
答案 0 :(得分:12)
如果你使用1.9,你可以使用look-behind:
/(?<=\S)[\t ]+$/
但不幸的是,旧版本的ruby不支持它,所以你必须处理捕获的角色:
str.gsub(/(\S)[\t ]+$/) { $1 }
答案 1 :(得分:1)
您的第一个表达式已关闭,您只需要将\ b更改为否定的字符类。这应该更好:
/([^\t ])[\t ]+$
简单来说,这会匹配不是制表符或空格的字符后面的行上的所有制表符和空格。
答案 2 :(得分:0)
这不会有帮助吗?
/([^\t ])([\t ]+)$/
但是,您需要对匹配的最后一个非空格字符执行某些操作。
答案 3 :(得分:0)
编辑:哦,你的意思是非空行。然后你需要像/([^ \ s])\ s + /这样的东西和第一部分
我不完全确定你要求的是什么,但是如果你只想捕捉尾随的空格,那么就不会有这样的工作吗?
([\s]+)$
或者如果您只想捕捉标签
([ \t]+)$
由于正则表达式是贪婪的,它们会尽可能多地捕获。如果您知道要捕获的内容,则不需要事先为它们提供上下文。
我仍然不确定你的缩进占位符是什么意思,所以如果我误会,我很抱歉。
答案 4 :(得分:0)
[\ T | \ S] + $
或 [] + $