brands = 'Lawrence Bill Lawrence OBL Billdidit Binson Bitchstraps Biyang Black Arts'
非常大
如果我的字符串包含其中一个
,我希望它找到my_str = ' txt txt OBL txt'
my_str[(/#{brands}/)]
但我有RegexpError: end pattern with unmatched parenthesis
我做错了什么?
答案 0 :(得分:0)
如果你想“查找我的字符串是否包含其中一个字符串”,则不需要正则表达式:
brands = %w|BAR FOO|
my_str = ' txt txt BAR txt'
brands.any? { |brand| my_str.include? brand }
#⇒ true
brands.detect { |brand| my_str.include? brand }
#⇒ "BAR"
不幸的是,这会匹配BAR
等字符串中的text FOOBARBAZ text
。为了避免这种情况:
my_str =~ Regexp.union brand.map(&:Regexp.escape).map { |e| "\b#{e}\b" }
事实上,由于Regexp.union
会转义字符串本身,因此应将其写为:
my_str =~ Regexp.union brand.map { |e| "\b#{e}\b" }
对于那些懒得理解普通英语的人:
my_str.scan Regexp.union brand.map { |e| "\b#{e}\b" }
答案 1 :(得分:0)
pattern = Regexp::union(brands.strip.split(/\W+/))
# => "/Lawrence|Bill|OBL|Billdidit|Binson|Bitchstraps|Biyang|Black|Arts/"
my_str.match(pattern)
# => #<MatchData "OBL">
my_str.scan(pattern)
# => ["OBL"]