如何在VBA中使用正则表达式将“\ n”替换为vbNewLine,只要它之前没有“\”?就我的研究而言,VBScript背后没有负面看法。
下面有两个我已尝试过的模式示例:
Private Sub tester()
Dim Dict As New Dictionary
Dict("test") = "Line"
Debug.Print StringTemplate("${test}1\n${test}2 & link: C:\\notes.txt", Dict)
End Sub
Public Function StringTemplate(S As String, Dict As Dictionary) As String
Dim i As Integer
Dim regEx As Object
Set regEx = CreateObject("VBScript.RegExp")
regEx.Global = True
'============================================================
' PATTERN # 1 REPLACES ALL '\n'
'============================================================
'regEx.Pattern = "\\n"
'============================================================
' PATTERN # 2 REPLACES EXTRA CHARACTER AS LONG AS IT IS NOT '\'
'============================================================
regEx.Pattern = "[^\\]\\n"
'REGEX REPLACE
S = regEx.Replace(S, vbNewLine)
' REPLACE ALL '${DICT.KEYS(i)}' WITH 'DICT.ITEMS(I)' VALUES
For i = 0 To Dict.Count - 1
S = Replace(S, "${" & Dict.Keys(i) & "}", Dict.Items(i))
Next i
StringTemplate = S
End Function
模式#1的结果:(不需要时替换)
线路1
Line2&链接:C:\
otes.txt
模式#2的结果:(替换'Line1'中的1)
行
Line2&链接:C:\\ notes.txt
我可以轻松编写不使用可以达到我预期目标的正则表达式的代码,但是想看看VBA中是否有正则表达式的方法?
答案 0 :(得分:1)
是的,你可以在这里使用正则表达式。由于反斜杠不用于在这些字符串中自行转义,因此您可以像这样修改解决方案:
regEx.Pattern = "(^|[^\\])\\n"
S = regEx.Replace(S, "$1" & vbNewLine)
它会在\
之前匹配并捕获\n
之前的任何字符,然后将其与$1
占位符一起放回。由于\n
有可能出现在字符串的开头,^
- 字符串锚点的开头 - 作为替代方式添加到捕获组中。
模式详情
(^|[^\\])
- 捕获第1组:字符串开头(^
)或(|
)任何字符,但反斜杠([^\\]
)\\
- 反斜杠n
- n
字符。