【问题标题】:MS Excel: Extract between the Nth and Nth Character in a stringMS Excel:在字符串中的第 N 个和第 N 个字符之间提取
【发布时间】:2021-06-24 12:24:58
【问题描述】:

使用 MS Excel 公式(无 VBA/宏),我想提取字符串中的第 N 个和第 N 个字符和/或字母。示例:我在 A2 和 A3 列中有文本,我想提取以下每个字符串中位于第 4 个空格和第 9 个空格之间的文本。

A2栏:强尼去商店买了一个苹果和一些葡萄

A3栏:没想到这么早回家,下雨没办法

结果:

A2 栏:存储并购买了一个苹果

A3栏:这么早回家

【问题讨论】:

    标签: excel excel-formula extract multiple-occurrence


    【解决方案1】:

    借助 Microsoft 365 或 Excel 2019,您可以将 TEXTJOIN()FILTERXML() 结合使用:

    B1中的公式:

    =TEXTJOIN(" ",,FILTERXML("<t><s>"&SUBSTITUTE(A1," ","</s><s>")&"</s></t>","//s[position()>4][position()<6]"))
    

    xpath 表达式首先选择从第 5 个单词开始的所有元素,因此只返回相应数组中的前 5 个元素。所以//s[position()&gt;4][position()&lt;6]也可以写成//s[position()&gt;4 and position()&lt;10]

    【讨论】:

    • 感谢 JvdV,这绝对有效...我想知道,根据您使用 FitlerXML 的出色解决方案,我是否能够交换或替换搜索参数以在任何给定位置提取文本。例如,我想交换“空格”并在文本中的 3 个逗号和第 10 个空格之间提取。
    • 根据您的数据的外观,我想我会在任何这种情况下查看上面的一个轻微变体,嵌套几个 SUBSTITUTE() 函数。 @Miaka3。但是,您可能希望包含示例数据,并且可能需要您自己尝试解决这个问题。
    • 感谢您的回复。根据我的问题和您的回复,我在每个单元格中都有文本,可能需要在两个不同的数据点之间进行提取。在提供的这个示例文本中,我想知道您提供的真棒,我怎样才能将搜索条件从“空格”更改为另一个。第 2 个逗号和第 10 个空格之间的示例摘录:“我们度过了一个愉快的夜晚,但是当开始下雨时,我们不得不离开,然而,我们确实玩得很开心。那天晚上晚些时候,我回家了,直到第二天我才离开家早晨。”结果:“但是我们确实玩得很开心。那天晚上晚些时候我去了”
    • 对于任何这样的查询,我想我会考虑使用SUBSTITUTE() 中的第四个参数来指示您想要更改每个分隔符的哪个出现。一个逗号,一个空格,例如:=FILTERXML("&lt;t&gt;&lt;s&gt;"&amp;SUBSTITUTE(SUBSTITUTE(A1,",","&lt;/s&gt;&lt;s&gt;",2)," ","&lt;/s&gt;&lt;s&gt;",10)&amp;"&lt;/s&gt;&lt;/t&gt;","//s[2]")@Miaka3
    • 我真的在屏幕上认真地微笑着,想和你握手。我一直在顽固地尝试了几个小时而不需要帮助的事情,只用了几分钟就解决了。 .. 难以置信的感谢 JvdV
    【解决方案2】:

    您正在寻找的是一个子字符串函数,它在 excel 中并不真正可用,我建议您查看本教程以了解执行相同功能的函数https://www.excel-easy.com/examples/substring.html,并尝试为您的用例找到最佳的. 我认为 MID 功能最适合您的用例。

    【讨论】:

      猜你喜欢
      • 2022-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多