我有一串字符需要从六个数字之间搜索字母大写P
,每边三个。它的位置可以在字符串中变化,但每次都有六位数的条件。 P的两侧数字为000到999。
我想找到公式字母P的字符串中的数字位置。
以下是字符串的示例:(请注意,有几个资本P要争用。)
TCPXX *,CWOP-1:@ 082050z4713.76N / 12228.23W_005 / 005g010t040r000p的 000P000 h96b10210L086eWUHU216DAVISVP2
答案 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位数。