我是第一次接触excel,这个逻辑对我来说似乎很坚韧,
我有一个文本在一个单元格中为ex - '这是一个测试字符串和代码:6676 RtA 01“,我需要提取此文件-6676 RtA 01
逻辑-我需要提取字母数字或数字代码,出现在imeediate字代码/代码忽略任何特殊字符,空格或下划线,括号等
单词code/codes应区分大小写,如果发现多个代码,则应使用“;“这里有几个前-
- '测试字符串',输出-空白
- “另一个测试字符串CODE”6657 Yuyt 9和代码:9989 ′,产量6657元/万吨;9989
- '带代码括号(代码A011261)',输出- A011261
4条答案
按热度按时间eh57zj3b1#
严格地说,我认为您需要忽略字符串中可能出现的所有非字母数字字符,同时保留所需提取的大小写:
az31mfrm2#
根据您的示例,您可以使用以下内容:
我可以想象有更简单的方法......:)
dwbf0jvd3#
我的努力是:
我不知道这是否比@Rory的答案简单(由于不知道XML过滤,我不理解),它只短了10个字符。
0x6upsns4#
这里有另一种办法,它考虑到评注中所述的补充规则:* 代码至少有一个数字 *。此方法可防止任何误报,而误报将
SEARCH/FIND
用作解决方案的一部分时会产生。例如,对于以下字符串:codeine A10 is not a code A20
将只返回A20
。使用
TEXTSPLIT(A, TEXTSPLIT(set,,1)
拆分和删除不需要的字符的想法我从@jvdV提供的答案中获得了这个想法,并将其应用到以下问题中:Concatenate only upper case letters?。一旦我们有了信息拆分(stxt
),您就可以使用XMACHT
来查找code
或codes
的列索引。一旦我们有了标记位置(
xm
),候选代码就在下面的列中,名称idx
可以找到相应的列,有了这些列,我们就可以从stxt
通过INDEX
找到候选代码(codes
)。现在我们需要检查
codes
是否有效(isCode
),即至少一个数字。我们使用BYCOL
并搜索数字BYCOL
的输入是10xm
的数组,其中m
是候选项codes
的编号。如果找到编号,则在给定行位置返回1
,否则0
。按列使用MAX
将生成需要通过FILTER
过滤的布尔数组。最后,我们通过TEXTJOIN
将结果用逗号分隔。前面的逻辑可以 Package 在用户
LAMBDA
函数GET_CODES
中,因此我们可以生成如下的数组版本:以下是使用
GET_CODES
时的输出:x1c 0d1x如您所见:3
正确识别bracket
不是有效代码4
仅正确标识A02
,因为对于A01
,标记不是code
/codes
。测试它不会生成误报。5
和6
返回空,因为字符串中没有有效代码