我不认为你可以在Excel中原生地使用正则表达式,我觉得这需要一些VBScript,我不知道。
我有一个数据集,其中包含给定列中的以下格式的字符串
123 foo, 234-bar, 345 baz , ...
我想在每个以逗号分隔的记录的开头提取数字,并在另一列中将它们相加。
如果我们在逗号上拆分字符串并考虑子字符串,我认为这足以作为正则表达式
^\D*?(\d+)?\D*/
(只应考虑多个数字中的第一个,无数字符串应提取为空并被视为零。)
以下是某些样本数据的预期输出
INPUT OUTPUT
-------------------------------------
5-foo, 10 bar 15
11 baz, 11
bad,string 0
hello,123,100, 100 ,xxx 323
如何让Excel执行此计算?
答案 0 :(得分:0)
要在Excel / VBA中使用VBScript RegExps,请添加对" Microsoft VBScript正则表达式5.5" (版本可能会发生变化),正如the answer simoco指出的那样详细描述。
要对字符串中的数字序列求和,请使用简单模式,例如" \ d +"。
证据:
Option Explicit
Dim aTests : aTests = Array(_
Array("5-foo, 10 bar", 15) _
, Array("11 baz", 11) _
, Array("bad,string", 0) _
, Array("hello,123,100, 100 ,xxx", 323) _
)
Dim reNum : Set reNum = New RegExp
reNum.Global = True
reNum.Pattern = "\d+"
Dim aTest, nSum, oMTS, oMT
For Each aTest In aTests
Set oMTS = reNum.Execute(aTest(0))
nSum = 0
For Each oMT In oMTS
nSum = nSum + CLng(oMT.Value)
Next
WScript.Echo qq(aTest(0)), nSum, CStr(nSum = aTest(1))
Next
Function qq(s) : qq = """" & s & """" : End Function
输出:
cscript 22861549.vbs
"5-foo, 10 bar" 15 True
"11 baz" 11 True
"bad,string" 0 True
"hello,123,100, 100 ,xxx" 323 True
(存在正则表达式以使困难事情变得容易,反之亦然)