【问题标题】:Finding a string in the middle of a path在路径中间找到一个字符串
【发布时间】:2019-03-14 11:40:34
【问题描述】:

我尝试在路径中间找到一个字符串。我在两个反斜杠后遇到了“查找”反斜杠的问题。

以下两个公式都得到相同的数字。我相信这是因为在第二个反斜杠之后它缺少“+1”,所以第三个从第二个开始重新计数。

如何增加以下“反斜杠计数”以访问路径更远的部分?

\path1\path2\path3\path4\path5

=FIND("\";A2;FIND("\";A2; FIND("\"; A2; FIND("\"; A2)+1)))

这以“path2”开头。

=FIND("\";A2;FIND("\";A2; FIND("\"; A2; FIND("\"; A2; FIND("\";A2)+1))))

这也让我获得了“path2”。

有没有办法根据带有FIND() 的反斜杠来选择路径的一部分?

【问题讨论】:

  • 什么版本的 Excel?
  • @RonRosenfeld,Excel 2016。
  • 由于您的每个FIND,除了最后一个,都从反斜杠位置开始搜索,他们找到的第一个字符将是第一个反斜杠。只有你的最后一个是找到第二个反斜杠。您需要有一个+1 作为每个的起始位置。你的公式相当于=FIND("\",A2,FIND("\",A2)+1)
  • 能否请您上传一张包含您的数据样本和理想结果的图片?

标签: excel excel-2016


【解决方案1】:

你的公式(他们两个)减少到

2nd \    =FIND("\",A2,FIND("\",A2)+1)

如果你想转到“下一个”反斜杠,你必须+1循环中的每个起始位置。

如果您使用FIND,使用SUBSTITUTE 将所需的\ 替换为唯一字符然后FIND 该字符会更简单。

但更简单的方法是将字符串拆分为数组,然后返回适当的数组元素。

使用 Excel 2016,您可以使用 FILTERXML 函数轻松完成此操作:

=INDEX(FILTERXML("<t><s>" & SUBSTITUTE(A2,"\","</s><s>") & "</s></t>","//s"),3)

请注意,由于您的字符串以\ 开头,因此所需元素的索引号将为n+1 而不是n(即3 将返回path2

对于早期的 excel 版本,还有其他方法可以做到这一点。

【讨论】:

    【解决方案2】:

    你可以试试:

    1. 在 A1 中导入字符串“path1\path2\path3\path4\path5” - 删除第一个“\”
    2. 选择单元格 A1
    3. 转到数据选项卡 - 数据工具 - 文本到列
    4. 选择分隔符 - 下一步
    5. 另一端导入“\” - 下一步
    6. 完成

    【讨论】:

      【解决方案3】:

      用一串等于原始字符串长度的空格替换每个反斜杠,然后选择你想要的部分。

      =TRIM(MID(SUBSTITUTE(A2, "\", REPT(" ", LEN(A2))), LEN(A2)*1, LEN(A2)))    '<- path1
      =TRIM(MID(SUBSTITUTE(A2, "\", REPT(" ", LEN(A2))), LEN(A2)*2, LEN(A2)))    '<- path2
      =TRIM(MID(SUBSTITUTE(A2, "\", REPT(" ", LEN(A2))), LEN(A2)*3, LEN(A2)))    '<- path3
      =TRIM(MID(SUBSTITUTE(A2, "\", REPT(" ", LEN(A2))), LEN(A2)*4, LEN(A2)))    '<- path4
      =TRIM(MID(SUBSTITUTE(A2, "\", REPT(" ", LEN(A2))), LEN(A2)*5, LEN(A2)))    '<- path5
      
      'alternates for first and last
      =TRIM(LEFT(SUBSTITUTE(MID(A2, 2, LEN(A2)), "\", REPT(" ", LEN(A2))), LEN(A2)))    '<- path1
      =TRIM(RIGHT(SUBSTITUTE(A2, "\", REPT(" ", LEN(A2))), LEN(A2)))    '<- path5
      

      【讨论】:

        【解决方案4】:

        A1包含:

        垃圾\gjgherhg\3876iseugf\hviu4t\5432\happy\sad

        所以有一些垃圾之前第一个反斜杠。在 A2 中输入:

        =TRIM(MID(SUBSTITUTE($A$1,"\",REPT(" ",999)),ROWS($1:1)*999-998,999))
        

        并向下复制:

        如果您对特定部分感兴趣,请使用ROWS() 的适当替代品。因此,要获取 第三个 元素,请使用:

        =TRIM(MID(SUBSTITUTE($A$1,"\",REPT(" ",999)),3*999-998,999))
        

        注意:

        如果第一个反斜杠之前没有“垃圾”,您将得到一个空白。因此,如果您知道没有“垃圾”并且想要获取 path1,请使用:

        =TRIM(MID(SUBSTITUTE($A$1,"\",REPT(" ",999)),2*999-998,999))
        

        等等。如果您想要的只是反斜杠的位置,您可以使用SUBSTITUTE()。要获取第二个反斜杠的位置,请使用:

        =FIND(CHAR(1),SUBSTITUTE(A1,"\",CHAR(1),2))
        

        【讨论】:

          猜你喜欢
          • 2021-12-21
          • 1970-01-01
          • 2023-02-10
          • 1970-01-01
          • 1970-01-01
          • 2016-09-19
          • 1970-01-01
          • 1970-01-01
          • 2020-06-03
          相关资源
          最近更新 更多