gpt4 book ai didi

regex - Excel VBA - 从剪贴板返回字符串中所有子字符串的位置

转载 作者:行者123 更新时间:2023-12-04 21:52:20 25 4
gpt4 key购买 nike

我正在尝试在从剪贴板获取的字符串中找到唯一键的所有位置(后跟两个 Tab 击键),然后我希望使用这些位置插入回车,然后将所有内容放回剪贴板再次。

首先要做的事;让职位部分发挥作用!

这是字符串的缩短示例:

Initial Approval in First Market or Non-Submitted Closure       090052fb842ef82f        090052fb842f3659        090052fb842ef82e        

这是迄今为止我在研究问题时汇总的非功能代码:
Sub oldRecords()

Dim clipboard As MSForms.DataObject
Dim strContents As String

Set clipboard = New MSForms.DataObject
clipboard.GetFromClipboard
strContents = clipboard.GetText

Set objRegEx = CreateObject("vbscript.regexp")
objRegEx.Pattern = "(090052fb)[0-9A-Za-z]{8}\t\t"
objRegEx.Global = True
objRegEx.IgnoreCase = True
objRegEx.MultiLine = True

Start = 1
Do
pos = InStr(Start, strContents, objRegEx.Execute(strContents), vbBinaryCompare)
If pos > 0 Then
Start = pos + Len(objRegEx.Pattern)
WScript.Echo pos
WScript.Echo Mid(strContents, pos, Len(objRegEx.Pattern))
End If
Loop While pos > 0

End Sub

现在我收到一个运行时错误“450”:参数数量错误或属性分配无效,我认为罪魁祸首是:
objRegEx.Execute(strContents)

我不确定从这里去哪里,所以任何帮助都会很棒! :)

编辑1:
首先感谢您对我的问题感兴趣!

BrackNicku 为我显然认为比实际需要复杂的问题提供了一个简单的解决方案!这是我最终使用的代码,在核心问题之上添加了一些我需要的额外位:
Sub oldRecords2()
Dim clipboard As MSForms.DataObject
Dim strContents As String
Dim start As Long, pos As Long

Set clipboard = New MSForms.DataObject
clipboard.GetFromClipboard
strContents = clipboard.GetText
Dim objRegEx
Set objRegEx = CreateObject("vbscript.regexp")
objRegEx.Pattern = "(090052fb[0-9A-Za-z]{8})\t\t"
objRegEx.Global = True
objRegEx.IgnoreCase = True
objRegEx.MultiLine = True

X1 = 10 ' Line Feed Character
X2 = 13 ' Carriage Return Character
X3 = "Archive Custodain Group"
X4 = "Archive Custodain Group" & Chr(X2)
'======================================================================================================

strContents = Replace(strContents, Chr(X1), "") ' REMOVES LINE FEEDS
strContents = Replace(strContents, X3, X4) ' ADDS CR AFTER TITLE ROW

strContents = objRegEx.Replace(strContents, "$1" & vbNewLine)
'======================================================================================================

clipboard.SetText strContents 'PUT BACK INTO CLIPBOARD
clipboard.PutInClipboard
End Sub

最佳答案

当你运行 objRegEx.Execute(strContents) ,它返回一个匹配集合。然后,您甚至没有将结果用作 Len(objRegEx.Pattern)返回模式的长度而不是匹配项。

您似乎只想在字符串中获取匹配项及其索引。删除所有从 Start = 1 开始的并以 Loop While pos > 0 结尾并使用

Dim ms As Object, m As Object
'...
objRegEx.Pattern = "(090052fb[0-9A-Za-z]{8})\t\t"
'...
Set ms = objRegEx.Execute(strContents)
For Each m In ms
WScript.Echo m.FirstIndex
WScript.Echo m.SubMatches(0)
Next

经测试
strContents = "Initial Approval in First Market or Non-Submitted Closure" & vbTab & vbTab & "090052fb842ef82f" & vbTab & vbTab & "090052fb842f3659" & vbTab & vbTab & "090052fb842ef82e" & vbTab & vbTab

结果:
 59 
090052fb842ef82f
77
090052fb842f3659
95
090052fb842ef82e

注意我将捕获组移动到除了制表符模式之外的所有位置, (090052fb[0-9A-Za-z]{8})\t\t ,请随意根据您的需要进行调整。

关于regex - Excel VBA - 从剪贴板返回字符串中所有子字符串的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51537974/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com