我要求删除两个字符串之间的文本 该案文的一个例子是:
Abc%678x”cv ","@metadata":{abxkl "DataArray"}},{"columnName":"
要求是从,"@met
到"}
要求是使用,"@met
和"}
作为开始和结束标识符,并删除它们之间的文本,包括标识符。
文件中可能会多次出现此开始和结束标识符。
输出应如下所示:
Abc%678x”cv "},{"columnName":"
如何编写Excel公式或简单的VBA脚本来删除两个字符串之间的文本,包括标识符?
答案 0 :(得分:2)
公式:
=LEFT(A1,FIND(",""@met",A1)-1)&RIGHT(A1,LEN(A1)-FIND("}",A1,FIND("""@met",A1)))
VBA功能:
Function RemoveBetweenSeparators( _
ByVal MyString As String, _
ByVal SepL As String, _
ByVal SepR As String) _
As String
Dim sL As String
Dim sR As String
sL = Split(MyString, SepL)(0)
sR = Replace(MyString, sL, "")
sR = Replace(sR, Split(sR, SepR)(0) & SepR, "")
RemoveBetweenSeparators = sL & sR
End Function
可以这样使用:
=RemoveBetweenSeparators(A1,"""@meta","}")
编辑:我也错过了多次出现'要求,第一次!这使得它有点棘手,但试试这个:
Function RemoveBetweenSeparatorsMultiple( _
ByVal MyString As String, _
ByVal SepL As String, _
ByVal SepR As String) _
As String
Dim sOut As String
Dim sL As String
Do Until InStr(MyString, SepL) = 0
sL = Split(MyString, SepL)(0)
sOut = sOut & sL
MyString = Replace(MyString, sL & SepL, "", 1, 1)
sL = Split(MyString, SepR)(0)
MyString = Replace(MyString, sL & SepR, "", 1, 1)
Loop
RemoveBetweenSeparatorsMultiple = sOut & MyString
End Function
答案 1 :(得分:0)
我的道歉,没有注意到可能会发生多次。我稍后会编辑我的答案。
假设原始文本存储在A1。
A2=LEFT(A1,FIND(",""@met",A1)-1)&RIGHT(A1,LEN(A1)-FIND("""}",A1)-1)
注意:如果您需要强制excel将双引号标记视为普通文本,则必须输入两个"
来表示"
。
如果可能发生多次,请尝试此
Private Function RemoveText(ByVal tgtString As String, ByVal StartText As String, ByVal EndText As String) As String
Do While InStr(1, tgtString, StartText) > 0
tgtString = Left(tgtString, InStr(1, tgtString, StartText) - 1) & Right(tgtString, Len(tgtString) - InStr(1, tgtString, EndText) - 1)
Loop
RemoveText = tgtString
End Function
Private Sub test()
'remove certain string in A1 and store the result in A2
Range("A2").Value = RemoveText(Range("A1").Value, ",""@met", """}")
End Sub
答案 2 :(得分:0)
也许是这样的事情(虽然没经过测试!):
Function cleanedStr (inpStr as String; beginDel as string; endDel as Str) as String
Dim idx as long
Dim take as boolean
Dim outStr as String
Dim myCh as String
take = true
outStr = ""
for idx = 1 to len(inpStr)
myCh = mid(inpStr, idx, 1)
if myCh = beginDel then take = false
if take then
outStr = outStr & myCh
else
if myCh = endDel then take = true
end if
next idx
cleanedStr = outStr
end Function
介意,开始标识符只有1个字符 beginDel将是@并且endDel将是}
答案 3 :(得分:0)
这可以使用VBA和正则表达式轻松完成:
Option Explicit
Function RemoveBetweenDelimiters(S As String) As String
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
With RE
.Global = True
.ignorecase = True
.Pattern = ",""@met[^}]+}"
RemoveBetweenDelimiters = .Replace(S, "")
End With
End Function
正则表达式解释:
,"@met[^}]+}
选项:不区分大小写; ^ $匹配在换行
创建