我有一个正则表达式,用于从另一个字符串中删除扩展名
此示例中的扩展名为
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的最佳方法是什么?
答案 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