Excel 公式返回字符串中特定一组字符之后的所有内容,但不包括字符串中的下一个数字字符?

Excel 公式返回字符串中特定一组字符之后的所有内容,但不包括字符串中的下一个数字字符?

Excel 2007

我在单元格 A1 中有一个字符串,我需要一个公式进入 B1 来查看该字符串并找到特定字符)和字符 kHz 之后的下一个数字字符,并返回两者之间的所有字符。

它不能返回)和此后的数字字符,因为它们只是充当分隔符。

kHz返回结果的一部分(并且应该作为其一部分返回),但由于它保持不变并且不会改变,因此它也可以作为公式在寻找此后的第一个数字字符时使用的良好参考。

字符串示例

Gjj2826)_48_kHz_16jouioj

所以我想要公式提取并返回_48_kHz_

永远)都是这样,)并且不会改变。

将会16jouioj改变,但第一个字符始终是数字。

将会_48_kHz_改变,它可能是_244_kHz_或者_4_kHz_因此需要一些东西作为我需要的文本两侧的分隔符。

谢谢

答案1

Excel 公式 FIND 不支持正则表达式,那么您必须使用 VBA:

Sub Exec()
  Static reg as Object
  Set reg = CreateObject("vbscript.RegExp")
  reg.Global = True
  reg.IgnoreCase = False
  reg.Pattern = ".+\)(_\d+_\w+_).+"
  Dim matches As Object
  Set matches = reg.Execute(Range("A1").Value)
  Range("B1").Value = matches.item(0).submatches.item(0)
End Sub


答案2

您提供的三个提取的文本都包含“kHz”,所以我相信这应该有效:

=LEFT(MID($A1,FIND("_",$A1,1),LEN($A1)),FIND("kHz",MID($A1,FIND("_",$A1,1),LEN($A1)),1)+3)

在此处输入图片描述

编辑:

由于您的实际文本字符串比您的帖子中的答案复杂得多,Wasif Hasan 的答案更接近您的需要,但模式并不完全正确,匹配对象的用法也不完全正确(我认为)。

在您的工作簿中创建一个新模块(按Alt+F11打开 Visual Basic 编辑器,然后右键单击引用当前工作簿的 VBAProject 的模块节点并选择“插入>模块”:

在此处输入图片描述

将此代码粘贴到模块中:

Option Explicit

Public Function GetFrequency(ByRef r As Range) As String

    Dim regex As Object

    Set regex = CreateObject("VbScript.RegExp")

    With regex
        .Global = True
        .IgnoreCase = False
        .Pattern = "_[0-9]+?_kHz_"
        GetFrequency = .Execute(r).Item(0).Value
    End With

End Function

然后,您可以在工作簿中使用该函数。例如:

=GetFrequency(A2)

在此处输入图片描述

相关内容