簡體   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