我正在使用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中转义字符串中的所有内容?
由于
答案 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
将包含(
之前的部分。
^([^(]+)\(
根据您的语言,您可能必须将其转义为:
"^([^(]+)\\("