我需要截断与给定模式不匹配的字符串部分。让我们说字符串是:
s = "Lorem ipsum dolor sit amet"
我的匹配模式是ipsum dolor
,我想截断所有其余部分,以便:
s.gsub(/_the_pattern_/, '') # => "ipsum dolor"
答案 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"