excel - 寻求更有效的公式从分隔文本字符串中提取字段
问题描述
我正在使用以下长公式从分隔字符串中提取特定字段。该公式工作正常,但有没有更有效的方法,注意它必须支持具有 100 个分隔字段的非常大的字符串?
=IFERROR(MID($A1,FIND("®",SUBSTITUTE(A1,char(187),B1))+1,FIND("®",SUBSTITUTE(A1,CHAR(187),"®",B1+1))-(FIND("®",SUBSTITUTE(A1,CHAR(187),"®",B1))+1)),"")
A1
包含字符串;
char(187)
是分隔符;
B1
包含我要提取的字段的编号
任何帮助将不胜感激
a1 = »44130»是»44105»»为端到端医疗评估流程设计和实施工作流系统,以改善客户体验、数据准确性和运营效率»
B1 = 3
答案 = 44105(作为文本)
字符串中的数据可能包括任何能够在标准键盘上键入的内容 “®”已在替代公式中选择,因为它不是标准字符
Windows Excel 2016(但希望它尽可能广泛兼容)
解决方案
- 如果您有 Windows Excel 2010+ 或 Office 365,
- 如果你的字符串,加上替换,将少于 32,768 个字符,
- 如果
"char(187) is the delimiter"
完全定义了字符串的相关特征, - 然后你就可以使用这个
FILTERXML
功能了。
例如:
=FILTERXML("<t><s>" & SUBSTITUTE($A1,CHAR(187),"</s><s>") & "</s></t>","//s[" & $B1 &"]")
但是,如果有数值,这可能会删除前导零。
这是否比您的公式更有效可能取决于您对有效的定义
编辑请注意,如果您的字符串恰好包含保留字符,即HTML 实体,您将需要替换它们(使用SUBSTITUTE
带有实体名称的嵌套 s。(它们将作为输出字符串中的正确字符出现)。如果链接没有t 工作,搜索该术语。
一个常见的实体可能是 & 号&
。
为了解决这个问题,您可以使用以下公式:
=FILTERXML("<t><s>" & SUBSTITUTE(SUBSTITUTE($A1,"&","&"),CHAR(187),"</s><s>") & "</s></t>","//s["&B1&"]")
另请注意,空节点将返回#Value!
错误。
推荐阅读
- sql - 基于大小写的 SQL 过滤器
- google-app-engine - 在 Google Cloud Build 过程中连接到数据库的问题
- java - AspectJ 不适用于实现 AsyncUncaughtExceptionHandler 的类
- java - 使用 lambda 表达式和正则表达式 java 返回具有文件大小的映射
- javascript - Javascript:indexOf() 和 substr() 未返回日期字符串的预期结果
- python - 在 Jupyter 笔记本中使用 PIL 库运行 2 段等效的 Python 3.7.6 代码,但得到不同的结果
- time-complexity - 时间复杂度:我们如何找到 O(n^3)?
- python - 由于依赖关系,无法在 Centos 7 中卸载 numpy
- python - 从列表列表创建数据框:每条记录的列数据重复
- sql - 将 SP 输出保存到 powershell 中的变量中