我有一个存储在 SQLite 数据库中的正则表达式模式,我用它来查找特定的字符串(请参阅下面的 WhatItShouldLookLike)。当我从数据库检索此变量到我的代码中时,它会显示为(请参阅下面的 WhatRegExReads)。 我曾经用@符号对字符串进行硬编码,一切都工作正常,但通常我不喜欢对这样的东西进行硬编码,以防它们发生变化。 我该如何解决这个问题?有没有办法直接读取来自数据库的字符串?
我正在考虑在数据库中出现时输入要替换的关键字,但还没有尝试过。 喜欢查尔(34)。
这是我的问题: 正则表达式找到我想要的东西
但是在它离开数据库之后,它被转换为这个,并且正则表达式找不到我想要的东西
它在数据库中是这样的:
硬编码字符串找到 1 个匹配项 在此输入图片描述
数据库中完全相同的字符串没有匹配 在此输入图片描述
代码位于几个不同的函数中。
var whatItShouldLookLike = @"(?<LineSize>[0-9]{1,2}\"")";
var whatRegExReads = @"(?<LineSize>[0-9]{1,2}\\\"\")";
List<Dictionary<string, dynamic>> lst = GetTblToDictionary("McRegEx");
Dictionary<string, dynamic> dict = lst.FirstOrDefault(d => d["PatternName"].Equals("LineNoCleanUp"));
//string regExPatt = @"(?<LineSize>[0-9]{1,2}\"")(?<Dash1>\-)(?<Spec1>\w{1,5})*(?<Spec2>\s{1})*(?<Dash2>\-)(?<Unit>\w{1,3})(?<TankFarm>\-[1-3])*(?<Dash3>\-)(?<PCID>[A-Z]{0,4})(?<Designation>[0-9]{1,4})(?<Dash4>\-)*(?<Insul>[A-Z]{0,2})(?<Dash5>\-)*(?<Trace>[A-Z]{0,3})(?<Winterization>\([W]\))*(?<Dash6>\-)*(?<TCount>[0-9]{0,1})(?<Tsize1>\-)*(?<Tsize2> )*(?<Tsize3>[0-9]{0,1})(?<Tsize4>\/)*(?<Tsize5>[0-9]{0,1})(?<Tsize6>\"")*";
string regExPatt = dict["Pattern"];
public void GetTblToDictionary(string tblName)
{
try
{
string sql = "Select * from " + tblName;
List<Dictionary<string, dynamic>> lst = new();
using (var con = new SqliteConnection(ConnString))
{
con.Open();
var command = con.CreateCommand();
command.CommandText = sql;
using (SqliteDataReader reader = command.ExecuteReader())
{
while (reader.Read())
{
try
{
Dictionary<string, dynamic> dict = new();
for (int i = 0; i < reader.FieldCount; i++)
{
//need to get literal here<--------
var tmp = reader.GetName(i);
dict.Add(tmp.ToString(), reader.GetValue(i));
}
lst.Add(dict);
}
catch
{
//todo log
}
}
}
con.Close();
}
return lst;
}
catch
{
//todo log
return null
}
}
所以我想通了,我必须将数据库中的字符串更改为如下所示
(?<LineSize>[0-9]{1,2}")
而不是这个
(?<LineSize>[0-9]{1,2}\"")