regex - Excel VBA : search a string to find the first non-text character

标签 regex excel vba

单元格包含字符串中的混合字符,例如:

Abcdef_8765
QWERTY3_JJHH
Xyz9mnop

我需要找到第一个非 A-Za-z 字符,以便我可以去掉字符串的后续剩余部分。

所以结果是:

Abcdef
QWERTY
Xyz

如果我确切地知道我要查找的字符,我就知道该怎么做,但我无法直观地掌握如何查找除 A-Za-z 之外的任何字符。

顺便说一句,这旨在在 解决方案中使用。

====================

编辑:

我在以下方面取得了成功...

a = "abc123"
b = Len(a)

For x = 1 To b

c = (Mid(a, x, 1) Like "[a-zA-Z]")
If c = False Then
d = Left(a, x - 1)
Exit Sub
End If

Next x

我是否偶然发现了合适的解决方案,或者这注定会失败? 我问这个问题只是因为我看了 Doug Glancy 的解决方案,它看起来更实质性。 (顺便说一句,我还没有测试道格的解决方案)

最佳答案

这是一种不使用正则表达式的简单方法。我故意不使用正则表达式,因为其他两个答案都基于正则表达式。 RegEx 肯定更快,但这几乎同样快。速度差异几乎可以忽略不计。

Function GetWord(Rng As Range)
    Dim i As Long, pos As Long

    For i = 1 To Len(Rng.Value)
        Select Case Asc(Mid(Rng.Value, i, 1))
            Case 65 To 90, 97 To 122
            Case Else: pos = i: Exit For
        End Select
    Next i

    GetWord = Left(Rng.Value, pos - 1)
End Function

用法:

=GetWord(A1)

enter image description here

编辑:

评论跟进。微调代码(由 @brettdj 提供)。

Function GetWord(Rng As Range)
    Dim i As Long, pos As Long
    Dim sString As String

    sString = UCase$(Rng.Value)

    For i = 1 To Len(sString)
        Select Case Asc(Mid$(sString, i, 1))
        Case 65 To 90
        Case Else: pos = i: Exit For
        End Select
    Next i

    GetWord = Left(Rng.Value, pos - 1)
End Function

更多跟进。

这是我以前从未尝试过的东西。我对我的代码与 RegXp 进行了实际测试,我惊讶地发现我的代码比 RegXp 更快,这是我没有预料到的。

我在 10k 个单元上进行了测试,每个单元都有一个长度为 2256 的字符串

我放入单元格A1:A10000的字符串是

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeSiddharth5RoutaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeSiddharth5RoutaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeSiddharth5RoutaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeSiddharth5RoutaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeSiddharth5RoutaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeSiddharth5RoutaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeSiddharth5RoutaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccdddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeSiddharth5Rout

enter image description here

接下来我运行了这个测试

enter image description here

关于regex - Excel VBA : search a string to find the first non-text character,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20296443/

相关文章:

javascript - 仅包含特定单词的过滤数组

javascript - 匹配所有字符直到下一次匹配的正则表达式

sql-server - SSIS Excel 连接管理器错误

swift - 在 Swift Xcode 中使用 Excel 工作表中的数据

python - 100% CPU 使用率,正则表达式取决于输入长度

vb.net - 从范围内的单元格中读取所有唯一值并从中创建一个逗号分隔的字符串?

arrays - 比较取自工作表范围的 2 个数组时出现 Application.Match 错误

vba - 如何在 Excel 中更改事件单元格的位置(或将值加一)

vba - 在 Excel 表中自动更新数据时返回确切更新内容的消息

php - 解析 PHP 中的属性/值列表