需要正则表达式专家:stringliteral中的圆括号

时间:2010-09-16 01:15:41

标签: python regex vba

我正在使用Regex在字符串中搜索字符串。该模式是以(结尾的字符串文字,例如

# 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中使用regexp,但没有这种方法。我只有替换,执行或测试方法。

有没有办法在VBA中转义字符串中的所有内容?

由于

4 个答案:

答案 0 :(得分:2)

您没有指定语言,但它看起来像Python,因此如果您在Python中有一个字符串,您需要转义其特殊的正则表达式字符,请使用re.escape()

>>> import re
>>> re.escape("Wow. This (really) is *cool*")
'Wow\\.\\ This\\ \\(really\\)\\ is\\ \\*cool\\*'

请注意,空格也被转义(可能确保它们仍在re.VERBOSE正则表达式中工作)。

答案 1 :(得分: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

答案 2 :(得分:0)

我很确定,由于VBA / VBScript中RegExp功能的限制,您必须在使用之前替换模式中的特殊字符。似乎没有像Python中那样内置任何东西。

答案 3 :(得分:-1)

以下正则表达式将捕获从字符串开头到第一个(的所有内容。第一个捕获的组$1将包含(之前的部分。

^([^(]+)\(

根据您的语言,您可能必须将其转义为:

"^([^(]+)\\("