我想根据大数据集中另一个单元格中另一个字符串的条件来提取字符串的一部分。我有:
V1 V2
Tom Cruise Tom Cruise (movie 1), Al Pacino (movie 2), Johnny Depp (movie 5)
Johnny Depp Tom Bennet (movie 3, movie 4), Johnny Depp (movie 5)
Emma Watson Al Pacino (movie 8), Emma Watson (movie 1, movie 3), Antony B. (movie 5)
并且我需要基于V1创建一个新字段,该字段将报告V1名称旁边括号之间的文本。结果数据集将需要具有:
V1 V2 V3
Tom Cruise Tom Cruise (movie 1), Al Pacino (movie 2), Johnny Depp (movie 5) movie 1
Johnny Depp Tom Bennet (movie 3, movie 4), Johnny Depp (movie 5) movie 5
Emma Watson Al Pacino (movie 8), Emma Watson (movie 1, movie 3), Antony B. (movie 5) movie 1, movie3
我尝试过将功能= LEFT和FIND结合使用,但仍然会出错。
=LEFT(V1, FIND( " (", V2))
根据您的数据,您可能有返回不想要的结果的风险。假设"Hello World"
可以是"Say Hello World"
的一部分。因此,我认为FIND
不会成为非常安全的途径。
如果您可以针对某个数组MATCH
查找值,那就太好了。因此,您可以尝试以下操作:
=INDEX(FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B2,")","^")," (","^"),"^, ","^"),"^","</s><s>")&"</s></t>","//s"),MATCH(A2,FILTERXML("<t><s>"&SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(B2,")","^")," (","^"),"^, ","^"),"^","</s><s>")&"</s></t>","//s"),0)+1)
Note1:这是假设您的查找值位于A2
中,而您的完整字符串位于B2
Note2:这是一个数组公式,需要通过Ctrl Shift Enter
进行确认使用正则表达式来帮助...
首先,您需要准备正则表达式VBA函数。在“ VBA参考”中,添加“ Microsoft VBScript正则表达式5.5”。然后将其添加到您将继续用作Excel插件的.xlam文件中,或将其放在.xlsm工作簿中的本地位置。
Public ThisRE As New RegExp
Public Function ReplaceRE(ByVal FromStr As String, ByVal PatternStr As String, ByVal ByStr As String) As String
'$1 as first bracket
ThisRE.Pattern = PatternStr
ThisRE.Global = True
ReplaceRE = ThisRE.Replace(FromStr, ByStr)
End Function
使用正则表达式的公式是:
=ReplaceRE(B3,"^.*(^|, )"&A3&" \(([^)]+)\).*","$2")