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

时间:2015-01-09 03:04:03

标签: excel excel-vba excel-formula vba

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

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

以下是字符串的示例:(请注意,有几个资本P要争用。)

  

TCPXX *,CWOP-1:@ 082050z4713.76N / 12228.23W_005 / 005g010t040r000p的 000P000 h96b10210L086eWUHU216DAVISVP2

3 个答案:

答案 0 :(得分:0)

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

一个公式很难建立。

我做了更激烈的搜索,实际上遇到了这个VBA解决方案。

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

就像这个应用程序的冠军一样。

来自链接的代码:

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

答案 1 :(得分:0)

鉴于你已经走了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

答案 2 :(得分:-1)

您可以使用Regular expressions

来完成

请参阅此文章,了解如何在Excel中使用它们:

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

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

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