根据其他值提取字符串的一部分

问题描述 投票:0回答:2

我想根据大数据集中另一个单元格中另一个字符串的条件来提取字符串的一部分。我有:

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))
excel string excel-formula substring extract
2个回答
0
投票

根据您的数据,您可能有返回不想要的结果的风险。假设"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

进行确认

0
投票

使用正则表达式来帮助...

首先,您需要准备正则表达式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")

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.