我是c#(Pattern)中的验证字符串。
验证的是,它包含一个或多个单词动态
例如:
第一个字符串 - 新故障单更新 - ID:新,优先级为:新在GSD中为您分配新的故障单/操作项
第二个字符串 - #故障单更新 - ID:#,优先级为:#在GSD中为您分配了新的故障单/操作项
我的数据库中有第二个字符串,我用#替换了动态字,它可以是任何内容。
如果第一个字符串与第二个字符串中给出的模式匹配,则验证第一个字符串。
我知道可以使用字符串拆分操作完成,但我们是否有任何替代方法可以提高效率,因为拆分操作我们很重,就像我们可以使用正则表达式或其他东西一样。
IF第一个字符串是: AnyWordWithNumbers 票证更新-ID: AnyWordWithNumbers ,优先级为: AnyWordWithNumbers 为您分配新的票证/操作项在GSD。
所以这个字符串是有效的.. IF第一个字符串是: AnyWordWithNumbers Tt更新ID: AnyWordWithNumbers 优先级: AnyWordWithNumbers 在GSD中为您分配新的票证/操作项< / p>
最后一个(。)丢失了,并且故障单的拼写错误,无效。
不是:用粗体字标记可以是任何东西
答案 0 :(得分:1)
您可以使用此正则表达式:
private static readonly Regex TestRegex = new Regex(@"^([A-Za-z0-9]+) Ticket Update- ID:\1 with Priority:\1 A New ticket/action item is assigned to you in GSD\.$");
public bool IsValid(string testString)
{
return (TestRegex.IsMatch(testString));
}
答案 1 :(得分:0)
在正则表达式中,\w
代表字母,下划线和数字。所以你可以使用:
If (Regex.IsMatch(input, @"^\w+ Ticket Update- ID:\w+ with Priority:\w+ A New ticket/action item is assigned to you in GSD\.$") {
}
如果它必须是同一个单词三次,您可以使用之前匹配的组号\n
:
If (Regex.IsMatch(input, @"^(\w+) Ticket Update- ID:\1 with Priority:\1 A New ticket/action item is assigned to you in GSD\.$") {
}
如果您想允许不同的空格,可以使用\s*
代表任意数量的空格,或\s+
代表至少一个空格:
If (Regex.IsMatch(input, @"^\s*\w+\s+Ticket Update- ID\s*:\s*\w+\s+with Priority\s*:\s*\w+\s+A New ticket/action item is assigned to you in GSD\.$") {
}
答案 2 :(得分:0)
以下方法将为您提供预期的结果。
static bool IsMatch(string templateString, string input)
{
string[] splittedStr = templateString.Split('#');
string regExString = splittedStr[0];
for (int i = 1; i < splittedStr.Length; i++)
{
regExString += "[\\w\\s]*" + splittedStr[i];
}
Regex regEx = new Regex(regExString);
return regEx.IsMatch(input);
}
使用以下方法,如下,
string templateString = "# Ticket Update- ID:# with Priority:# A New ticket/action item is assigned to you in GSD";
string testString = "New Ticket Update- ID:New with Priority:New A New ticket/action item is assigned to you in GSD";
bool test = IsMatch(templateString, testString);