java - 正则表达式 括号内的括号

标签 java regex string windows vbscript

我有这个逻辑编程软件,可以将结果输出到以下形式的文本文件中:

[-a(b), +i(c), +i(d)] 
[-a(f(g(a))), -a(f(a,b)), -a(f(c)), -a(f(d)), -a(b)]
...

可以扩展到数百或数千行。

我只是希望能够通过删除括号内包含括号的行(换句话说,谓词内的函数)来缩小这个数字,例如 -a(f(g(a)))-a(f(c))...并保留所有其他行。

任何人都可以指导我,也许可以为我提供一个简单的例子,说明如何以最简单的方式实现这一点,一点也不花哨,也许是在 VBScript 或批处理中(是的,我在 Windows 上),它读取的内容文本文件并删除未占用的行。

编辑:vbs 工作示例

Dim re, targetString
Set re = New RegExp
With re
  .Pattern = "\([^()]*\("
  .Global = False
  .IgnoreCase = False
End With

targetString = "[-a(f(g(a))), -a(f(a,b)), -a(f(c)), -a(f(d)), -a(b)]"

if re.Test(targetString) <> True Then
    MsgBox "valid",0,"test"
else
    MsgBox "invalid",0,"test"
end if

最佳答案

对于正则表达式来说,匹配嵌套括号始终是一件棘手的事情,因为递归结构不规则。但在您的示例中,您可以简单地查找两个左括号相互跟随而没有中间右括号的行:

if (/\([^()]*\(/.test(line)) {
    // discard line
} else {
    // keep line
}

说明:

\(     # Match (
[^()]* # Match any number of characters except parentheses 
\(     # Match another (

关于java - 正则表达式 括号内的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13030490/

相关文章:

在 ubuntu 上使用 JNI 时出现 java.lang.UnsatisfiedLinkError

java - 在 LibGdx 初始化 ShapeRenderer 时如何避免 NullPointerException

java - 正则表达式,如何识别由空格分隔的 2 或 3 个单词(任何非空格)

c++ - 为什么这些字符串不会在 C++ 中连接?

string - 如何从字符串中删除任何尾随数字?

java.sql.SQLException : The Network Adapter could not establish the connection

java - 在eclipse Java中安装chromedriver

regex - htaccess 如何将子目录重定向到外部 URL

regex - 使用正则表达式通过 Google BigQuery 从 URL 中提取产品名称

python - 使用嵌套分隔符号拆分 Python 字符串