截断不匹配字符串的一部分

时间:2014-03-31 14:29:43

标签: ruby regex gsub

我需要截断与给定模式不匹配的字符串部分。让我们说字符串是:

s = "Lorem ipsum dolor sit amet"

我的匹配模式是ipsum dolor,我想截断所有其余部分,以便:

s.gsub(/_the_pattern_/, '') # => "ipsum dolor"

3 个答案:

答案 0 :(得分:2)

_the_pattern_替换您的字词。这里.*表示任何角色。

s.gsub(/.*(_the_pattern_).*/, '\1')

确保该字词不包含任何特殊的正则表达式字符,例如( [ + *等。

s.gsub(/.*(ipsum dolor).*/, '\1')

\1()中从正则表达式匹配中捕获的组。

答案 1 :(得分:1)

"Lorem ipsum dolor sit amet"[/_the_pattern_/]

答案 2 :(得分:1)

我会使用String#scan后跟Array#join而不是String#gsub,因为当模式匹配多次时,将后者用于您的目的很尴尬。 (由于您使用gsub而不是sub,我假设可能会多次出现该模式。)

s = "Lorem ipsum dolor sit amet"          #=> "Lorem ipsum dolor sit amet" 
pattern = %r[ipsum dolor]                 #=> /ipsum dolor/ 
s.scan(pattern).join                      #=> "ipsum dolor" 

s = "A rose by any other name is a rose." #=> "A rose by any other name is a rose." 
pattern = %r[[Aa]\srose]                  #=> /[Aa]\srose/ 
s.scan(pattern).join                      #=> => "A rosea rose"