检查具有正则表达式的另一个字符串中是否存在字符串

时间:2011-09-28 22:48:28

标签: ruby regex

我有一个正则表达式,用于从另一个字符串中删除扩展名

此示例中的扩展名为

BK|BZ|113

如果字符串不包含任何扩展名,那么我需要它保持字符串不变。

我正在使用的正则表达式是

base_value = base_string[/(.*?[^-])-?(?:BK|BZ|113)/,1]

但是,如果base_value不包含字符串,我想返回base_value。我以为我可以用

base_value = base_string
base_value = base_string[/(.*?[^-])-?(?:BK|BZ|113)/,1] unless (base_value !~ /(.*?[^-])-?(?:BK|BZ|113)) == false

但这不起作用。

如果找不到扩展名,返回base_string的最佳方法是什么?

3 个答案:

答案 0 :(得分:2)

如果我理解得很好,你想从字符串中剥离正则表达式,如果它匹配,对吧?所以......做到了:

string.sub(/(?:BK|BZ|113)$/, "")

答案 1 :(得分:0)

也许你可以像这样使用sub:

base_string1 = "test1BK"
base_string2 = "test2"

p base_string1.sub(/(.*?[^-])-?(?:BK|BZ|113)/,'\1')
p base_string2.sub(/(.*?[^-])-?(?:BK|BZ|113)/,'\1')

当找不到模式时,不会替换任何内容,否则返回没有扩展名的字符串。

答案 2 :(得分:0)

如果/(.*?[^-])-?(?:BK|BZ|113)/不匹配,则base_string[/(.*?[^-])-?(?:BK|BZ|113)/,1]将为nil。所以这应该有效:

base_value = base_string[/(.*?[^-])-?(?:BK|BZ|113)/,1] || base_string