gsub来自字符串的相同模式

时间:2014-09-10 15:00:54

标签: ruby regex gsub

我在弄清楚正则表达式如何工作方面遇到了很大的问题。 我想要这个文字:

This is an example\e[213] text\e[123] for demonstration

成为这个:

This is an example text for demonstration.

所以这意味着我要删除所有以\e[开头并以]结尾的字符串 我只是找不到合适的正则表达式。 我目前的正则表达式如下:

/.*?(\\e\[.*\])?.*/ig

但它不起作用。我感谢你的每一个帮助。

3 个答案:

答案 0 :(得分:3)

你只需要这样做:

txt.gsub(/\\e\[[^\]]*\]/i, "")

无需与.*

之前或之后的内容相匹配

第二个问题是您使用.*来描述括号之间的内容。由于*量词默认为贪婪,因此它将匹配所有直到同一行中的最后一个右括号。

要防止出现这种情况,可以使用否定字符类代替排除方括号[^\]]的点。通过这种方式,您可以保持使用贪婪量词的优势。

答案 1 :(得分:2)

gsub可以为您进行全局匹配。

re = /\\e\[.+?\]/i
'This is an example\e[213] text\e[123] for demonstration'.gsub re, ''
=> "This is an example text for demonstration"   

答案 2 :(得分:1)

使用正则表达式

中的.+?可以减少搜索搜索量
puts 'This is an example\e[213] text\e[123] for demonstration'.gsub(/\\e\[.+?\]/, '')  
This is an example text for demonstration  
=> nil