在字母数字字符串中搜索特定字符
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
我有一串字符,我需要从六个数字之间搜索字母大写 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