需要正则表达式专家:字符串字面量中的圆括号
我正在用正则表达式在字符串中查找其他字符串。我的模式是一个以(
结尾的字符串,比如:
# pattern
" before the bracket ("
# string
this text is before the bracket (and this text is inside) and this text is after the bracket
我知道如果我用反斜杠来转义这个字符,模式就能正常工作,也就是说:
# pattern
" before the bracket \\("
但是这些模式字符串是从其他搜索中得到的,我无法控制字符是什么或者它们的位置。有没有办法可以把整个字符串字面量转义,这样在标记之间的任何东西都能被当作字符串处理?比如:
# pattern
\" before the ("
我唯一的其他选择就是替换每个需要保护的字符,加上转义符。
re.escape正是我需要的。我在Access VBA中使用正则表达式,但它没有这个方法。我只有替换、执行或测试的方法。
有没有办法在VBA中转义字符串中的所有内容?
谢谢
4 个回答
0
我很确定,在VBA/VBScript中,正则表达式的功能有限,所以你需要在使用之前先替换掉模式中的特殊字符。这里面没有像Python那样的内置功能。
2
你没有说明使用的语言,但看起来像是Python。如果你在Python中有一个字符串,里面有特殊的正则表达式字符需要转义,可以使用re.escape()
这个方法:
>>> import re
>>> re.escape("Wow. This (really) is *cool*")
'Wow\\.\\ This\\ \\(really\\)\\ is\\ \\*cool\\*'
需要注意的是,空格也会被转义(可能是为了确保它们在re.VERBOSE
模式下仍然有效)。
1
也许可以自己写一个VBA的转义函数:
Function EscapeRegEx(text As String) As String
Dim regEx As RegExp
Set regEx = New RegExp
regEx.Global = True
regEx.Pattern = "(\[|\\|\^|\$|\.|\||\?|\*|\+|\(|\)|\{|\})"
EscapeRegEx = regEx.Replace(text, "\$1")
End Function