繁体   English   中英

正则表达式查找模式,然后插入模式

[英]Regex to find a pattern, then insert into the pattern

使用Excel VBA

我不确定您是否可以使用正则表达式来执行此操作,但是我要尝试的操作是

“ ThisIsAn ExampleString”

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

所以最终结果将是

“这|是|一个示例|字符串”

所以我猜模式是“ [az] [AZ]”

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

编辑:

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

对于其他阅读本文的人,这就是我的最终结果:

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

正则表达式替换很好:)

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

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

我从此答案中获取=regex()函数-以前从未与Excel VBA一起使用...

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

如果可以执行替换,您将需要以下内容:

s/([a-z])([A-Z])/\1|\2/g
  • G =全局
  • S =更换
  • \\ 1和\\ 2从左侧引用括号内的组。

快速浏览Google给我的印象是VB宏有一个“ RegExp”类可供使用-可以执行替换:

https://msdn.microsoft.com/en-us/library/xwewhkd1(v=vs.110).aspx?cs-save-lang=1&cs-lang=vb#code-snippet-1

Dim rgx As New Regex(pattern)
Dim result As String = rgx.Replace(input, replacement)

我的建议中的pattern([az])([AZ]) replacement$1|$2

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

您可以在此处使用lookarounds

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

替换为| 请参阅演示。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM