带双引号的 RegExp 模式中的编译错误

Posted

技术标签:

【中文标题】带双引号的 RegExp 模式中的编译错误【英文标题】:Compile error in RegExp pattern with double quotes 【发布时间】:2017-04-02 14:36:04 【问题描述】:

我想在从 .txt 文件中挑选的字符串中搜索用双引号括起来的数字。我正在使用 Excel 宏来完成所有这些工作。示例数据:

"08134789316498"
"022"

我的代码:

Set oRegex1 = CreateObject("VBScript.RegExp")
oRegex1.Pattern = "(\"[0-9]+\"])"

但是上面一行给出了错误:

“编译错误:预期语句结束”

注意:我已经添加了对“Microsoft VBScript Regular Expressions 5.5”和“Microsoft VBScript Regular Expressions 1.0”的引用

【问题讨论】:

这不是关于正确正则表达式模式的问题,而是how to use a double-quote within a quoted string in VBA。但是,对于 + 是否应该充当字符串连接符号或字符串文字以及是否应该存在右方括号存在一些歧义。 【参考方案1】:

您不需要从正则表达式的角度转义双引号,但从 vbscript/vba 的角度来看。

oRegex1.Pattern = "(""[0-9]+""\])"
                    ^^      ^^   quotes escaped inside string by doubling them

【讨论】:

是否应该从 OP 的示例中包含尾随方括号?它似乎与叙述中的样本数据不符。 @Jeeped,问题中的文本指向一个“不,它不应该存在”,或者至少,就像在原始示例代码中一样“也许它应该在括号外”,但两个假设处理不同的问题,“正则表达式与我的数据不匹配”,而不是“编译错误:预期语句结束”,所以我决定保留它,因为它存在于 OP 代码中。但我认为进一步的信息可能会导致不同的模式。【参考方案2】:

应该是这样的。

oRegex1.Pattern = "(""[0-9]+"")"

【讨论】:

以上是关于带双引号的 RegExp 模式中的编译错误的主要内容,如果未能解决你的问题,请参考以下文章

从熊猫数据框保存不带双引号的csv文件

oracle regexp_like 与 select 模式

C语言编译、连接的各种错误

psexec 以错误代码 1 退出 - 双引号

C语言 如何输出"good",是带引号输出

存储过程 SQL 编译错误中的执行错误:Statement.execute 中的标识符“TEST3”无效