c# - 正则表达式不等于在 C# 字符串数组中不起作用
问题描述
我对此进行了研究,但无法弄清楚为什么?!
不在我的代码中执行 Not Equal。
代码有这个:
var policyOne = "C";
var policyTwo = "GF1";
var policyThree = "018"
string policyNumber = $"^(?!{Regex.Escape(policyOne)}){Regex.Escape(policyTwo)}{Regex.Escape(policyTwo)}$",
因此,尽管我也尝试过 ?!.*
,但我仍然无法识别 policyOne 不允许为“C”
所有 3 个变量在 sql linq where 子句中连接在一起
如果需要,我可以提供更多详细信息。
这是我的代码
string AnyStart = "XXXDEFGHI";
string AnythingMiddle = "ABCXXXGHI";
string AnyEnds = "ABCDEFZZZ";
List<string> Strings = new List<string>()
{
AnythingMiddle,
AnyStart,
AnyEnds
};
string hcdpPlnCvgCD = "ABC";
string HcdpPmtFctrCd = "DEF";
string hccCpmtFctrCd = "GHI";
var patterns = new string[]{
$"^(?!{Regex.Escape(hcdpPlnCvgCD)}){Regex.Escape(HcdpPmtFctrCd)}{Regex.Escape(hccCpmtFctrCd)}$",
$"^{Regex.Escape(hcdpPlnCvgCD)}(?!.*{Regex.Escape(HcdpPmtFctrCd)}){Regex.Escape(hccCpmtFctrCd)}$",
$"^{Regex.Escape(hcdpPlnCvgCD)}{Regex.Escape(HcdpPmtFctrCd)}(?!.*{Regex.Escape(hccCpmtFctrCd)})$",
};
var wildcards = new List<string>();
foreach (var pattern in patterns)
{
var matchResult = Strings.Where(s => Regex.IsMatch(s, pattern)).ToList();
matchResult.Dump();
}
wildcards.Dump();
解决方案
我将建议一些事情,首先你应该分别评估 3 种不同的模式。其次,似乎一个计划背后有一些逻辑,所以我提出了一个计划类。然后您可以使用 Linq 找到您想要的计划。
public class Plan
{
public Plan(string planCode)
{
PlanCode = planCode;
Evaluate();
}
private const string _planCoverage= "^ABC";
private const string _planPaymentFactor= "DEF";
private const string _planCoPaymentFactor = "GHI$";
public string PlanCode { get; set; }
public bool IsCoverage { get; set; }
public bool IsPayment { get; set; }
public bool IsCoPay { get; set; }
private void Evaluate()
{
IsCoverage = Regex.IsMatch(PlanCode, _planCoverage);
IsPayment = Regex.IsMatch(PlanCode, _planPaymentFactor);
IsCoPay = Regex.IsMatch(PlanCode, _planCoPaymentFactor);
}
}
使用此类,以下代码应完成您要执行的操作
string anyStart = "XXXDEFGHI";
string anyMiddle = "ABCXXXGHI";
string anyEnd = "ABCDEFZZZ";
List<Plan> plans = new List<Plan>(){
new Plan(anyStart),
new Plan(anyMiddle),
new Plan(anyEnd)
};
//what your first regex tried to accomplish
List<string> noCoveragePlans = plans
.Where(plan => !plan.IsCoverage && plan.IsPayment && plan.IsCoPay)
.Select(plan => plan.PlanCode)
.ToList();
//what your second regex tried to accomplish
List<string> noPaymentPlans = plans
.Where(plan => plan.IsCoverage && !plan.IsPayment && plan.IsCoPay)
.Select(plan => plan.PlanCode)
.ToList();
//what your third regex tried to accomplish
List<string> noCoPayPlans = plans
.Where(plan => plan.IsCoverage && plan.IsPayment && !plan.IsCoPay)
.Select(plan => plan.PlanCode)
.ToList();
推荐阅读
- python - discord.py:有什么东西可以使它在踢/禁止命令不起作用的地方吗?
- javascript - 用特定值替换与另一个数组中的任何项都不匹配的数组中的项
- r - 如何使用准引用以编程方式重新编码变量?
- javascript - JS:不确定类中函数的静态使用
- reactjs - MobX 对象更新时 React 组件不更新
- c++ - 使用 Visual Studio 2019 和 cmake 调试 Yaml_cpp
- jenkins - 如何在 groovy 中解析 JSON 数组
- android - UPI 深层链接请求失败
- laravel - 安装 Laravel Valet 时的问题
- excel - 如何使用 excel VBA/宏在网格中填充数组公式(使用多个条件)?