C# 仅当模式的长度大于某个值时,才使用正则表达式匹配该模式
我有两个字符串,我想知道C# 仅当模式的长度大于某个值时,才使用正则表达式匹配该模式,c#,regex,string-matching,C#,Regex,String Matching,我有两个字符串,我想知道 如果字符串2在 相同顺序 此子集的最小大小由我确定 例如: string 1 = stackoverflow <br>minimun size = 5 string 2a = stack (MATCH) string 2b = stac (DO NOT MATCH) string 2c = staov (MATCH) string 2d = staZov (DO NOT MATCH) string 2e = eflow (MATCH) string 2
string 1 = stackoverflow
<br>minimun size = 5
string 2a = stack (MATCH)
string 2b = stac (DO NOT MATCH)
string 2c = staov (MATCH)
string 2d = staZov (DO NOT MATCH)
string 2e = eflow (MATCH)
string 2f = ewolf (DO NOT MATCH)
string 2g = somethingstacksomething (MATCH)
string 1=stackoverflow
最小尺寸=5
字符串2a=堆栈(匹配)
字符串2b=stac(不匹配)
字符串2c=staov(匹配)
字符串2d=staZov(不匹配)
字符串2e=eflow(匹配)
字符串2f=ewolf(不匹配)
字符串2g=somethingstacksomething(匹配)
我正在以编程方式构建正则表达式,因此问题的第一部分可以用表达式来解决:(s)?(t)?(a)?(c)?(k)?(o)?(v)?(e)?(r)?(f)?(l)?(o)?(w)?
但我不知道如何应用“最小字符”规则。可以用正则表达式来做吗
提前谢谢编辑:添加另一个示例以完成问题说明。另外,如果您想知道,这是评估用户指定的密码强度的方法的一部分。如果他定义了一个从其他信息(登录名、出生日期、姓名等)派生的密码,我们应该警告他。您可以添加一个前瞻,确保有五个字符:
(?=.{5})s?t?a?c?k?o?v?e?r?f?l?o?w?
但我不知道如何应用“最小字符”规则
在确定可能的匹配项之后。您需要确定结果的长度
您只需使用String.Length即可确定该值。有趣的问题!有一种方法可以做到(但你不会喜欢的)。它会导致一个潜在的大(可能是慢)正则表达式。假设
string1
为ABCD
。下面是所有不同长度要求的正则表达式:
length=4;
正则表达式=@“
ABCD
";
长度=3;
正则表达式=@“
ABCD?
|ABC?D
|AB?CD
|卡介苗
";
长度=2;
正则表达式=@“
ABC?D?
|AB?CD?
|AB?C?D
|A?BCD?
|公元前
|A?B?CD
";
长度=1
正则表达式=@“
[ABCD]
";
我还没有考虑过如何用编程的方式来组装它,但我相信它是可以做到的。然而,一个具有大量OR'ed替代项的大型正则表达式可能比使用当前使用的“匹配然后检查匹配字符串的长度”方法要慢
我在这件事上摸了好一阵子头脑,我很确定没有简单/聪明的正则表达式构造能满足您的要求。您想用正则表达式这样做有什么原因吗?这种方法似乎效率不高。有一刻我认为它可以解决这个问题,但后来a意识到,字符串(如“stac1”)也是匹配的。你可以通过锚定正则表达式来解决这个问题:
^…$
你是对的@SLarks,但现在我发现我的问题描述根本不完整。如果字符串2的子字符串符合正则表达式,则字符串2(要测试的字符串)必须匹配,因此锚定不会解析它。我将纠正我的错误并更改原始帖子。@marcel:将可选字符放入一个组中,然后检查组的长度(如果正则表达式匹配)<代码>(s?t?a?c?k?o?v?e?r?f?l?o?w?)if(match.Groups[1].Length>5)
Yes,在我的代码中我会这样做。在我的例子中,我必须遍历每一个匹配项并查看长度。如果可能的话,我只是想在正则表达式阶段寻找一些方法来进行“大小检查”。