我在单元格A1中有这个文字:
年龄风险:非常低的位置风险:非常高
我想在第一个冒号(“:”)和第二个冒号左边的第二个空格之间找到文本。单元格内容可能会发生显着变化,但使用此逻辑应始终捕获必要的文本。在这种特殊情况下,我试图隔离“非常低”
我可以找到冒号的位置(“:”)
但是,我无法弄清楚如何计算第二个冒号左边的两个空格,以便能够在MID中使用它。
=MID(A1,FIND(":",A1)+2,(location of 2nd space to left of 2nd colon -FIND(":",A1)))
答案 0 :(得分:2)
您可以使用复杂的公式来完成,但使用UDF和正则表达式会更简单。以下UDF
这样做的一个优点是,如果您发现描述并不总是匹配,则更容易修改。
Option Explicit
Function ExtractSpecial(S As String) As String
Dim RE As Object
Set RE = CreateObject("vbscript.regexp")
With RE
.Pattern = "^[^:]+:\s+(.*?)(?=\s+\S+\s+\S+:).*"
.MultiLine = True
ExtractSpecial = .Replace(S, "$1")
End With
End Function
编辑正则表达式模式的说明以及进一步说明的链接:
^[^:]+:\s+(.*?)(?=\s+\S+\s+\S+:).*
选项:不区分大小写; ^ $不匹配的换行
^
[^:]+
:
\s+
(.*?)
(?=\s+\S+\s+\S+:)
.*
$ 1
创建答案 1 :(得分:1)
假设你也总是有“位置”,你可以搜索它,并将其修剪下来:
=TRIM(MID(A1,SEARCH(":",A1)+1,SEARCH("location",A1)-SEARCH(":",A1)-1))
编辑:根据您的评论:
=TRIM(MID(A1,SEARCH(":",A1)+1,SEARCH(";",SUBSTITUTE(A1," ",";",4))-SEARCH(":",A1)))
答案 2 :(得分:1)