gpt4 book ai didi

regex - 在VBA(excel)中从前面和后面的单元格中删除不需要的字符

转载 作者:行者123 更新时间:2023-12-02 10:49:27 28 4
gpt4 key购买 nike

我对编程非常陌生,尽管有人问了几个与我类似的问题,但我似乎无法让它们满足我的需求。

我想要的是能够将原始数据复制到 A 列中,在宏上运行,它应该删除我想要保留的数据之前和之后的任何不需要的字符,从而生成一个仅包含以下数据的单元格我想。我还希望它遍历列中的所有单元格,同时记住某些单元格可能为空。

我想要保留的数据采用以下格式:L1-somedata-0000

-somedata- 文本会改变,但 -ether 一侧将始终存在,L1 有时会是 L2,而 0000(可以是任意 4 个数字)有时会是任意 3 个数字。此外,列中可能有一些行没有有用的数据,应将其删除。最后,某些单元格不会包含任何不需要的数据,这些数据应该保持不变。

Sub Test()
Dim c As Range
For Each c In Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)
c = removeData(c.text)
Next
End Sub

Function removeData(ByVal txt As String) As String
Dim result As String
Dim allMatches As Object
Dim RE As Object

Set RE = CreateObject("vbscript.regexp")

RE.Pattern = "(L1-somedata-\d{4}|\d{3})"
RE.Global = True
RE.IgnoreCase = True
Set allMatches = RE.Execute(text)

If allMatches.Count <> 0 Then
result = allMatches.Item(0).submatches.Item(0)
End If

ExtractSDI = result

End Function

我已经放置了到目前为止我得到的代码,它所做的就是遍历每个单元格,如果它匹配,它只会删除我想要保留的文本以及我想要删除的内容!

我真的希望这一切都有道理!任何帮助将不胜感激。

克里斯

最佳答案

如果“-”是输入数据的一部分,您可以使用正则表达式替换,例如:

>> Set r1 = New RegExp
>> r1.Pattern = "^[^-]+(-[^-]+-).*"
>> WScript.Echo r1.Replace("L2-A-1234", "$1")
>>
-A-

或者:

>> Set r1 = New RegExp
>> r1.Pattern = "^[^-]+-([^-]+).*"
>> WScript.Echo r1.Replace("L2-B-123", "$1")
>>
B

除了 .Replace,您还可以使用子匹配:

>> WScript.Echo r1.Execute("Don't care-wanted-")(0).SubMatches(0)
>>
wanted

如果需要函数,请将正则表达式传递到函数中;并记住返回值必须分配给函数名称(removeData <> ExtractSDI)。

第二个规范的另一种可能性(“-”不是所需输出的一部分):

>> WScript.Echo Split("Whatever-Wanted-Ignore", "-")(1)
>>
Wanted

更新:

处理嵌入在所需输出中的“-”,并展示如何在公式中使用此方法/作为公式:

Option Explicit

' needs Ref to RegExp

Dim rX As RegExp

Function cleanSDI(s)
If rX Is Nothing Then
Set rX = New RegExp
rX.Pattern = "^([^-]*-)(.+)(-.*)$"
End If
cleanSDI = rX.Replace(s, "$2")
End Function

根据您的数据,您可能需要将 .Pattern 更改为

rX.Pattern = "^([^-]+-)(.+)(-.+)$"

允许 (*)/禁止 (+) 空头或空尾。使用Docs完成/理解模式。

关于regex - 在VBA(excel)中从前面和后面的单元格中删除不需要的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19398012/

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