我有这个逻辑编程软件,可以将结果输出到以下形式的文本文件中:
[-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/