需要正则表达式专家:字符串字面量中的圆括号

0 投票
4 回答
2580 浏览
提问于 2025-04-16 04:12

我正在用正则表达式在字符串中查找其他字符串。我的模式是一个以(结尾的字符串,比如:

# 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

撰写回答