在字母数字字符串中搜索特定字符

Search for specific character in alphanumeric string

我有一串字符,我需要从六个数字之间搜索字母大写 P,每边三个。它在字符串中的位置可能会有所不同,但每次都会有六位数字的条件。 P 两边的数字将为 000 到 999。

我想为公式查找字母 P 在字符串中的数字位置。

这是字符串的示例:(请注意有几个大写 P 需要处理。)

TCPXX*,CWOP-1:@082050z4713.76N/12228.23W_005/005g010t040r000p000P000h96b10210L086eWUHU216DAVISVP2.

您可以使用 Regular expressions

请参阅这篇文章,其中介绍了如何在 Excel 中使用它们:

  • How to use Regular Expressions (Regex) in Microsoft Excel both in-cell and loops

在您的情况下,您可能需要表达式:

\d\d\dP\d\d\d

它匹配 3 个数字,一个 P,然后是 3 个数字。

感谢 chris neilson、chandoo 和 brettdj 的投入。

公式很难构建。

我进行了更深入的搜索,实际上遇到了这个 VBA 解决方案。

http://www.excelfox.com/forum/f22/find-a-text-substring-that-matches-a-given-pattern-331/

这个应用程序非常出色。

来自 link 的代码:

Function GetPattern(Source As String, ByVal Pattern As String) As String
  Dim X As Long, FindPattern As Long
  Do Until Left(Pattern, 1) <> "*"
    Pattern = Mid(Pattern, 2)
  Loop
  For X = 1 To Len(Source)
    If Mid(Source, X) Like Pattern & "*" Then
      FindPattern = X
      Exit For
    End If
  Next
  If FindPattern = 0 Then Exit Function
  For X = 1 To Len(Source) - FindPattern + 1
    If Mid(Source, FindPattern, X) Like Pattern Then
      GetPattern = Mid(Source, FindPattern, X)
      Exit For
    End If
  Next
End Function

鉴于您已经走 VBA 路线,我将在一个字符一个字符地循环上使用 RegExp。这样就直接找到P位了

样本

    Sub Test()
    Debug.Print StripStr("TCPXX*,CWOP-1:@082050z4713.76N/12228.23W_005/005g010t040r000p000P000h96b10210L086eWUHU216DAVISVP2.")
    Debug.Print StripStr("notme")
    Debug.Print StripStr("123P456")
    End Sub

代码

Function StripStr(strIn As String) As String
Dim objRegex As Object
Dim objRegexMC As Object
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
    .Pattern = "\d{3}P\d{3}"
    If .Test(strIn) Then
        Set objRegexMC = .Execute(strIn)
        StripStr = objRegexMC(0).firstindex + 4
    Else
        StripStr = "not matched"
    End If
End With
End Function