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

标签 regex vba excel vbscript

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

我想要的是能够将原始数据复制到 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/

相关文章:

Javascript/Perl 正则表达式

php - preg_replace file_get_contents 中不包含单词的所有链接

java - 正则表达式匹配 ResourceBundle

vba - 如何根据单元格值删除行

vba - VBA-错误时如何进入下一个迭代循环

excel - Powershell - 将 'wrapText' 样式应用于某些单元格会导致整个工作表换行

regex - 在带sed的括号前放置逗号

excel - 如果满足条件,则删除首字母

javascript - 在 VBA 中从 Javascript 获取 XmlHttpRequest 的 ReadyState

excel - VB.Net:在某个单元格中插入形状