正则表达式匹配尾随空格,但不匹配完全空格的行(缩进占位符)

时间:2010-04-19 15:45:41

标签: ruby regex whitespace

我一直在尝试构建一个匹配尾随空格的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 ;  

或者,是否有更简单/更优雅的方法来做到这一点?

5 个答案:

答案 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] + $

或 [] + $