gpt4 book ai didi

regex - Excel中的反向字符串搜索

转载 作者:行者123 更新时间:2023-12-04 20:34:33 26 4
gpt4 key购买 nike

试图让 Column F/VENDOR # 仅填充供应商编号。供应商编号突出显示。我的策略是从右边,找到第三个"_"并将其替换为 "|" .然后在 D 列中填充管道右侧的任何内容。

但是超过三个的"_"不遵循逻辑。我究竟做错了什么?

D列公式=IF(ISERROR(FIND("_",C2)),"",RIGHT(C2,LEN(C2)-FIND("|",SUBSTITUTE(C2,"_","|",LEN(C2)-LEN(SUBSTITUTE(C2,"_","",3))))))
F 列/供应商# 公式 =IF(ISERROR(LEFT(D2,FIND("_",D2)-1)),"",LEFT(D2,FIND("_",D2)-1))
enter image description here

enter image description here

最佳答案

问题出在 D 列公式中 - 您有:
...LEN(C2)-LEN(SUBSTITUTE(C2,"_","",3))...
它应该是:
...LEN(C2)-LEN(SUBSTITUTE(C2,"_",""))-2...
给出 D 列的完整公式:
=IF(ISERROR(FIND("_",A17)),"",RIGHT(A17,LEN(A17)-FIND("|",SUBSTITUTE(A17,"_","|",LEN(A17)-LEN(SUBSTITUTE(A17,"_",""))-2))))
原因是因为这部分公式确实被用于计算另一个 SUBSTITUTE 中的索引。功能。如果 -2 的数量未知,则需要使用相对偏移量(_ 是从右数第三个) s 在字符串中。

如果您可以使用 VBA,那么您应该考虑使用带有正则表达式的 UDF,因为我觉得这比双公式方法稍微简单一些,而双公式方法并非易事。 UDF 可以简单地是这样的:

Option Explicit

Function GetVendorNumber(rng As Range) As String
Dim objRegex As Object
Dim objMatches As Object

GetVendorNumber = ""
Set objRegex = CreateObject("VBScript.RegExp")
With objRegex
.Pattern = "\D+_(\d+)_.+"
Set objMatches = .Execute(rng.Text)
If objMatches.Count = 1 Then
GetVendorNumber = objMatches(0).SubMatches(0)
End If
End With

End Function

关于regex - Excel中的反向字符串搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44600303/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com