[原创]对字符串中包含数字的部分进行数值运算

作者: Edengundam(马涛)
本篇文章引用的小例子来自如下链接:
 
将A12中的数值12进行减法运算, 变成A11.
 
PowerShell的脚本, 我用了正则表达式, 这里确实没有对应的bash处理简单, 但是我增加了一句异常处理, 这样用bash就需要先用其他手段检查字符串是否符合要求:
 

PS C:/> if("a12" -match "(/D+)(/d+)") {"$([string] $matches[1])$($matches[2] - 1)"} else {throw "Input Error"}
a11
PS C:/> if("a12a" -match "^(/D+)(/d+)$") {"$([string] $matches[1])$($matches[2] - 1)"} else {throw "Input Error"}
Input Error
At line:1 char:91
+ if("a12a" -match "^(/D+)(/d+)$") {"$([string] $matches[1])$($matches[2] - 1)"} else {throw <<<< "Input Error"}
PS C:/>

网中人(netman)老大给出Bash解法:

$ A=a13
$ echo ${A//[0-9]}$((${A//[!0-9]}-1))
a12
$

throw抛出的异常是一种捕获异常的好办法, C#, java的try, catch, finally, Perl的eval等都有类似能力. 同时注意$matches保存了最近一次正则表达式匹配的信息. 如下方法可以查看该HashTable的内容:

PS C:/> $matches

Name Value
---- -----
2     12
1      a
0    a12

也许这个处理PowerShell确实代码复杂了些, 但主要还是我对PowerShell不熟悉, 也许以后我会找到更好的办法呢^^

 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值