使Excel公式将string视为正则expression式
在我的Excel工作簿中,有很多00XX
的事件,其中X可以是任何数字。 例如, 0017
频繁出现。 我想使用SUBSTITUTE
function删除所有出现的00XX
。 到目前为止,我有这样的:
=SUBSTITUTE(C1,"00[0-9][0-9]","")
这不工作,我认为这是因为Excel将第二个string视为一个文字,而不是一个正则expression式。 有没有办法使这个公式的工作? 我知道一些编程语言允许你添加修饰符到一个string来改变它的含义,但是我还没有发现任何这样的事情。
该解决scheme不使用VBA
选一个未使用的专栏,说K栏。
在K1中input:
="00" & TEXT(ROW()-1,"00")
从K2到K100拷贝下来。 这是所有可能的“不良”子string的列表。
使用A1中的原始数据,在B1中input数组公式:
=IFERROR(TRIM(SUBSTITUTE(A1,INDEX(K1:K100,MATCH(1,COUNTIF(A1,"*"&K1:K100&"*"),0)),"")),A1)
数组公式必须使用Ctrl + Shift + Enterinput,而不仅仅是Enter键。
如果A1包含:
t0078yetryet
B1会显示:
tyetryet
- 使用更多的function插件(networking链接似乎是通灵
- 下面的
VBA UDF
,使用如=CleanString(A1)
testing
Sub TestDaCode() MsgBox CleanString("0018 2450 00notme 0017") End Sub
UDF
Function CleanString(strIn As String) As String Dim objRegex As Object Set objRegex = CreateObject("vbscript.regexp") With objRegex .Global = True .Pattern = "00\d{2}" CleanString = .Replace(strIn, vbNullString) End With End Function
为什么不简单地利用SEARCHfunction接受通配符的事实呢?
=REPLACE(A1,LOOKUP(2^15,FIND(TEXT(ROW(INDEX(A:A,1):INDEX(A:A,99)),"0000"),A1)),4,"")
请注意,迄今为止提出的两个解决scheme都不会在给定的string上同时replace多个这种子string。
问候