c# - 如果子字符串包含在引用字符串中,如何使用布尔表达式进行匹配?
问题描述
我想将布尔运算符应用于字符串,以便通过在参考字符串中搜索某些子字符串返回真/假结果。如果引用字符串包含子字符串布尔表达式,那么我想要一个真实的结果。
想象一下,我有一个参考字符串,如下所示:
string refString = "This is a long text made by some different words."
我有以下由子字符串组成的布尔表达式:
string expression = "This is&words"
我想要实现的是基于布尔表达式对引用字符串的应用返回一个真/假结果。在此示例中,如果参考字符串包含子字符串"This is"和子字符串"words",我想要一个真实的结果。
我从这样的事情开始:
private const string And = @"&";
private const string Or = @"|";
private const string Xor = @"^";
private bool FindSubstring(string _refString, string _expression)
{
string[] andExpression = _expression.Split(new string[] { And }, StringSplitOptions.None);
string[] orExpression = _expression.Split(new string[] { Or }, StringSplitOptions.None);
string[] xorExpression = _expression.Split(new string[] { Xor }, StringSplitOptions.None);
if (andExpression.Length > 1)
return andExpression.All(_refString.Contains);
if (orExpression.Length > 1)
return orExpression.Any(_refString.Contains);
if (xorExpression.Length == 2)
return _refString.Contains(xorExpression[0]) ^ _refString.Contains(xorExpression[1]);
}
它只适用于一个布尔运算符的简单操作,但如果我需要检查更复杂的表达式怎么办?
总的来说,它看起来很“丑陋”并且仅限于我:我将在表达式中添加一个转义字符检查,我需要大量代码来处理多个布尔运算符,我想我会发疯来处理带有嵌套括号的复杂表达式, 抄送。
是否存在像 Regex 这样的东西,我可以在其中编写一个复杂的布尔模式并与输入字符串匹配?
解决方案
是否存在像 Regex 这样的东西,我可以在其中编写一个复杂的布尔模式并与输入字符串匹配?
不,您要解析的表达式不是正则表达式,而是左递归上下文无关语法。那里有很多语法解析器和词法分析器(我个人使用 Irony.Net 和 Antlr),但是对于您的这个小语法,您可以编写自己的递归下降解析器,您只需要将左递归语法转换为一个右递归的。
还取决于你到底在做什么,Lucene.Net 可能会有所帮助。它会根据数据存储检查像您这样的布尔表达式,并返回带有“分数”的结果。从您的代码中不清楚这是一个 XY 问题,或者您是否真的只是针对一个字符串进行测试。
推荐阅读
- java - xmlbeans 在生成的源文件和 xsb 文件中自动大写类名
- sql - 子查询返回超过 1 个值,这导致 UPDATE 语句失败
- javascript - TypeError:无法读取未定义 discord.js 命令处理程序的属性“名称”
- postgresql - Postgres 复杂查询以获取具有与具有特定值的另一个表连接的对应列的列值
- javascript - 无法使用 JS 在 HTML 中获取图像的实际大小
- tailwind-css - PurgeCSS 忽略 TailwindCSS 中的所有宽度和响应宽度类
- maven - 特定环境下的 Liquibase 执行(maven + spring boot)
- kubernetes - kubernetes ingress-nginx 报 502 错误,地址字段为空
- java - TestNG 错误-java.lang.NoSuchMethodError: org.testng.TestRunner.addListener(Ljava/lang/Object;)V
- python - python - 如何根据值列表按两列或多列对python pandas中的dataFrame进行排序?