diff --git a/ceph-backend-migration.groovy b/ceph-backend-migration.groovy
index 8b8d256..634cdf8 100644
--- a/ceph-backend-migration.groovy
+++ b/ceph-backend-migration.groovy
@@ -155,7 +155,7 @@
 
                             if (partition?.trim()) {
                                 // dev = /dev/sdi
-                                def dev = partition.replaceAll("[0-9]", "")
+                                def dev = partition.replaceAll('\\d+$', "")
                                 // part_id = 2
                                 def part_id = partition.substring(partition.lastIndexOf("/")+1).replaceAll("[^0-9]", "")
                                 runCephCommand(pepperEnv, HOST, "parted ${dev} rm ${part_id}")
diff --git a/openstack-control-upgrade.groovy b/openstack-control-upgrade.groovy
index fdca22e..8f2aebd 100644
--- a/openstack-control-upgrade.groovy
+++ b/openstack-control-upgrade.groovy
@@ -226,7 +226,7 @@
 
             for (t in proxy_target_hosts) {
                 def target = t.split("\\.")[0]
-                proxy_general_target = target.replaceAll("[0-9]", "")
+                proxy_general_target = target.replaceAll('\\d+$', "")
                 _pillar = salt.getPillar(pepperEnv, "${kvm01}", "salt:control:cluster:internal:node:${target}:provider")
                 def nodeProvider = _pillar['return'][0].values()[0]
                 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'virt.destroy', ["${target}.${domain}"], null, true)
@@ -248,7 +248,7 @@
 
             for (t in control_target_hosts) {
                 def target = t.split("\\.")[0]
-                control_general_target = target.replaceAll("[0-9]", "")
+                control_general_target = target.replaceAll('\\d+$', "")
                 _pillar = salt.getPillar(pepperEnv, "${kvm01}", "salt:control:cluster:internal:node:${target}:provider")
                 def nodeProvider = _pillar['return'][0].values()[0]
                 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'virt.destroy', ["${target}.${domain}"], null, true)
@@ -492,7 +492,7 @@
 
             for (t in proxy_target_hosts) {
                 def target = t.split("\\.")[0]
-                proxy_general_target = target.replaceAll("[0-9]", "")
+                proxy_general_target = target.replaceAll('\\d+$', "")
                 _pillar = salt.getPillar(pepperEnv, "${kvm01}", "salt:control:cluster:internal:node:${target}:provider")
                 def nodeProvider = _pillar['return'][0].values()[0]
                 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'virt.destroy', ["${target}.${domain}"], null, true)
@@ -509,7 +509,7 @@
 
             for (t in control_target_hosts) {
                 def target = t.split("\\.")[0]
-                control_general_target = target.replaceAll("[0-9]", "")
+                control_general_target = target.replaceAll('\\d+$', "")
                 _pillar = salt.getPillar(pepperEnv, "${kvm01}", "salt:control:cluster:internal:node:${target}:provider")
                 def nodeProvider = _pillar['return'][0].values()[0]
                 salt.runSaltProcessStep(pepperEnv, "${nodeProvider}", 'virt.destroy', ["${target}.${domain}"], null, true)
