我有2个字符串我需要gsub:
前缀始终相同:ex xxx
中间可以是hhh
或yyy
'xxx-hhh-111'
'xxx-yyy-aaa'
在这两种情况下我需要做的是始终删除前缀:xxx
,这样就可以了:
'xxx-yyy-aaa'.gsub('xxx', '')
结果:
'-yyy-aaa'
但有时我需要检查正文是否为hhh
,如果为true,则删除前缀和后缀(模式是后缀为随机数字)
我想我可以用正则表达式来完成这个任何想法吗?
所以当字符串为xxx-hhh-111
时,我正在寻找的结果是:
'hhh'
简单的方法是2个语句,第一个总是删除上面使用的xxx
只需检查是否存在hhh
,如果存在,则返回hhh
例如:
if 'xxx-hhh-111'.include('hhh')
'hhh'
但如果我能用1个语句完成这两个案例,那就太好了......
答案 0 :(得分:1)
您可以依赖捕获组:您可以使用一个由括号分隔的捕获组,而不是将匹配的字符串替换为另一个捕获组,作为您要查找的结果。
"xxx-hhh-mmm".gsub /xxx-(hhh).*|xxx(.*)/, '\1' #=> 'hhh'
"xxx-yyy-mmm".gsub /xxx-(hhh).*|xxx(.*)/, '\1' #=> '-yyy-mmm'
'\1'
这里指的是第一个捕获组内的模式匹配:(hhh)或(。*)
答案 1 :(得分:0)
1)
0000-00-00
2)
STR_TO_DATE()
但如果我能用1个语句完成两个案例,那就太好了。
为什么?
答案 2 :(得分:0)
您应该可以使用
执行此操作xxx(-hhh-|-\w{3}-.*).*
并替换为第一个捕获组,即
data.gsub(/xxx(-hhh-|-\w{3}-.*).*/, "\\1")
其中数据是您的字符串。
此致
修改:注意到您不想要hhh
的连字符。使用
xxx-?(hhh|-\w{3}-.*).*
然后呢。 Example here.
答案 3 :(得分:0)
让我们不要过分思考:
def extract(str, target)
middle = str[4,3]
middle == target ? middle : str[3..-1]
end
extract("cat-hhh-123", "hhh") #=> "hhh"
extract("cat-dog-123", "hhh") #=> "-dog-123"