Excel - 提取两个字符串之间的字符串
Excel - Extract string between two strings
我有以下类型的字符串向量:
{'id': '123', 'text': 'What should I buy today?', 'choices':[{'value': 'Bread', 'label': 'You need to buy bread', 'selected': True}, {'value': 'Milk', 'label': 'You need to buy milk', 'selected': False}, {'value': 'Chips', 'label': "You need to buy chips", 'selected': False}]}
我想创建一个只包含以
结尾的句子的栏目
'selected': True
例如,关于上面的字符串我会得到
You need to buy bread
截至目前,我只能编写以下命令:
=MID(LEFT(A1,FIND(", 'selected': True",G5)-1),FIND("label':",G5)+7,LEN(G5))
但是,如果选择的操作 ('selected': True
) 不是列表中的第一个,它将不起作用。
新增:
使用 Office 365,您可以:
=LET( line, D3,
sentences, MID( line, FIND( "[", line ), 99999),
sarr, FILTERXML( "<m><s>" & SUBSTITUTE( sentences, "{", "</s><s>" ) & "</s></m>", "//s" ),
larr, INDEX( sarr, FILTER( SEQUENCE( ROWS( sarr ) ), ISNUMBER( FIND( "'selected': True", sarr ) ) ) ),
s, FIND( "'label': '", larr)+10, f, FIND( "',", larr, s ),
MID( larr, s, f-s ) )
其中 D3 是带有原始行的目标单元格。
我怀疑有更好的 FILTERXML hack 更简单的方法,但目前我还没有想到。如果 JvdV 在线,他就会知道。另外,P.b。可能会以更好的方式做到这一点。
NB: you must be consistent with string definitions. You must use ' as
opposed to ".
另一种方法是强制将 " 转换为 '。这样做可以,但可能会产生意想不到的后果:
=LET( line, D3,
sentences, MID( SUBSTITUTE( line,"""","'"), FIND( "[", line ), 99999),
sarr, FILTERXML( "<m><s>" & SUBSTITUTE( sentences, "{", "</s><s>" ) & "</s></m>", "//s" ),
larr, INDEX( sarr, FILTER( SEQUENCE( ROWS( sarr ) ), ISNUMBER( FIND( "'selected': True", sarr ) ) ) ),
s, FIND( "'label': '", larr)+10, f, FIND( "',", larr, s ),
MID( larr, s, f-s ) )
这是另一个公式选项,所有 Excel 版本都没有 LET 函数。
条件 ('selected': True) 可以按照以下示例放在列表的第一个、第二个或最后一个位置。
在C2
中,公式复制下来:
=TRIM(RIGHT(SUBSTITUTE(LEFT(SUBSTITUTE(A2,"""","'"),FIND(", 'selected': True",A2)-2),"'",REPT(" ",99)),99))
我有以下类型的字符串向量:
{'id': '123', 'text': 'What should I buy today?', 'choices':[{'value': 'Bread', 'label': 'You need to buy bread', 'selected': True}, {'value': 'Milk', 'label': 'You need to buy milk', 'selected': False}, {'value': 'Chips', 'label': "You need to buy chips", 'selected': False}]}
我想创建一个只包含以
结尾的句子的栏目'selected': True
例如,关于上面的字符串我会得到
You need to buy bread
截至目前,我只能编写以下命令:
=MID(LEFT(A1,FIND(", 'selected': True",G5)-1),FIND("label':",G5)+7,LEN(G5))
但是,如果选择的操作 ('selected': True
) 不是列表中的第一个,它将不起作用。
新增:
使用 Office 365,您可以:
=LET( line, D3,
sentences, MID( line, FIND( "[", line ), 99999),
sarr, FILTERXML( "<m><s>" & SUBSTITUTE( sentences, "{", "</s><s>" ) & "</s></m>", "//s" ),
larr, INDEX( sarr, FILTER( SEQUENCE( ROWS( sarr ) ), ISNUMBER( FIND( "'selected': True", sarr ) ) ) ),
s, FIND( "'label': '", larr)+10, f, FIND( "',", larr, s ),
MID( larr, s, f-s ) )
其中 D3 是带有原始行的目标单元格。
我怀疑有更好的 FILTERXML hack 更简单的方法,但目前我还没有想到。如果 JvdV 在线,他就会知道。另外,P.b。可能会以更好的方式做到这一点。
NB: you must be consistent with string definitions. You must use ' as opposed to ".
另一种方法是强制将 " 转换为 '。这样做可以,但可能会产生意想不到的后果:
=LET( line, D3,
sentences, MID( SUBSTITUTE( line,"""","'"), FIND( "[", line ), 99999),
sarr, FILTERXML( "<m><s>" & SUBSTITUTE( sentences, "{", "</s><s>" ) & "</s></m>", "//s" ),
larr, INDEX( sarr, FILTER( SEQUENCE( ROWS( sarr ) ), ISNUMBER( FIND( "'selected': True", sarr ) ) ) ),
s, FIND( "'label': '", larr)+10, f, FIND( "',", larr, s ),
MID( larr, s, f-s ) )
这是另一个公式选项,所有 Excel 版本都没有 LET 函数。
条件 ('selected': True) 可以按照以下示例放在列表的第一个、第二个或最后一个位置。
在C2
中,公式复制下来:
=TRIM(RIGHT(SUBSTITUTE(LEFT(SUBSTITUTE(A2,"""","'"),FIND(", 'selected': True",A2)-2),"'",REPT(" ",99)),99))