正则表达式找到一个模式,然后插入模式

时间:2015-10-08 16:19:15

标签: regex vba

使用Excel VBA

我不确定你是否可以用正则表达式做到这一点,但我想要做的就是像

这样的刺痛

" ThisIsAn ExampleString"

找到小写字母的每个实例,后面紧跟一个大写字母,然后在其中插入一个管道。

所以最后的结果就像

" This | Is | An Example | String"

所以我猜测模式是" [a-z] [A-Z]"

我开始认为我正在用正则表达式咆哮错误的树,应该尝试某种功能。

编辑:

感谢下面给出答案的所有人,你给了我解决方案。

对于其他读这篇文章的人来说,这就是我最终的目标:

Sub PipeInsert()

    Dim cell As Range
    For Each cell In Selection
        cell.Value = ReplaceTest(cell.Value, "([a-z])([A-Z])", "$1|$2")
    Next

End Sub


Function ReplaceTest(str1, patrn, replStr)
    Dim regEx

    ' Create regular expression.
    Set regEx = New RegExp
    regEx.Pattern = patrn
    regEx.Global = True

    ' Make replacement.
    ReplaceTest = regEx.Replace(str1, replStr)
End Function

3 个答案:

答案 0 :(得分:4)

正则表达式替换很好:)

=regex("ThisIsAn ExampleString", "([a-z])([A-Z])", "$1|$2")

https://regex101.com/r/zF4mM5/1

我从this answer抓取=regex()函数 - 之前从未使用Excel VBA ...

答案 1 :(得分:1)

您将使用所选语言的功能(在这种情况下为Excel VBA) - 我对此一无所知。我认为它具有使用正则表达式进行匹配和替换的能力......

如果它可以执行替换,你会想要这样的东西:

s/([a-z])([A-Z])/\1|\2/g
  • G =全球
  • S =替换
  • \ 1和\ 2指的是左侧的括号内组。

有一个快速的谷歌给我的印象VB宏有一个“RegExp”类可供他们 - 可以执行替换:

https://jsfiddle.net/sw5ohfqv/

Dim rgx As New Regex(pattern)
Dim result As String = rgx.Replace(input, replacement)
我的提案中

pattern([a-z])([A-Z]); replacement将是$1|$2

我这台机器上没有Excel,这纯粹是理论上的!

答案 2 :(得分:0)

您可以在此处使用lookarounds

(?<=[a-z])(?=[A-Z])

替换为|。请参阅演示。

https://regex101.com/r/cJ6zQ3/46