我想验证一个string
,看它是否至少有6位数且至少有1 int
。
string text = "I want to run 10 miles daily";
string pattern = @"(?=\.*\d).{6,}";
Match match = Regex.Match(text, pattern);
Console.WriteLine(match.Value);
请解释我为什么得到以下输出:
"每天10英里"
答案 0 :(得分:0)
\.*\d
这意味着字符串以数字结尾。
(?=\.*\d)
这会占用字符串
(?=\.*\d).
此模式在字符串中表示找到数字后的所有内容。
(?=\.*\d).{6,}
digit
之后的每个字符必须至少包含6个字符。
你需要这个正则表达式:(?=.*\d).{6,}$
。结果返回至少6个字符并且至少有一个是数字
答案 1 :(得分:0)
我知道这并没有回答你的问题,但我认为你正在寻找一个有效的RegEx
。你的陈述是I want to validate a string to see if it is at least 6 digits long and has at least 1 int.
。我认为你的意思是at least 6 characters long (including white space) and has at least 1 int.
这应该这样做(C#):
@"^(?=.*\d+)(?=.*[\w]).{6,}$";
RegEx Analyzer:UltraPico Expresso RegEx Tool
测试代码和输出(C#)
tatic void Main(string[] args)
{
string text = "abcdef";
Match match;
string pattern = @"^(?=.*\d+)(?=.*[\w]).{6,}$";
match = Regex.Match(text, pattern, RegexOptions.IgnoreCase);
Console.WriteLine("Text:'"+text + "'. Matched:" + match.Success + ". Value:" + match.Value);
text = "abcdefg";
match = Regex.Match(text, pattern, RegexOptions.IgnoreCase);
Console.WriteLine("Text:'" + text + "'. Matched:" + match.Success + ". Value:" + match.Value);
text = "abcde1";
match = Regex.Match(text, pattern, RegexOptions.IgnoreCase);
Console.WriteLine("Text:'" + text + "'. Matched:" + match.Success + ". Value:" + match.Value);
text = "abcd21";
match = Regex.Match(text, pattern, RegexOptions.IgnoreCase);
Console.WriteLine("Text:'" + text + "'. Matched:" + match.Success + ". Value:" + match.Value);
text = "abcd dog cat 21";
match = Regex.Match(text, pattern, RegexOptions.IgnoreCase);
Console.WriteLine("Text:'" + text + "'. Matched:" + match.Success + ". Value:" + match.Value);
Console.ReadKey();
}
答案 2 :(得分:0)
你得到“每天10英里”的原因是因为你指定了一个正向前瞻(?=\.*\d)
,它与一个零点或更多次的文字点匹配,然后是一个数字。
该断言在1之前的位置成功,它匹配零点数然后是数字:
I want to run 10 miles daily ..............|
从那一刻起,您匹配任何符合.{6,}
匹配的任何字符零次或多次:
I want to run 10 miles daily ^^^^^^^^^^^^^^
您可以更新正则表达式以删除点之前的反斜杠,并使用锚点断言该行的开始^
和结束$
:
匹配
^
断言一行(?=.*\d)
肯定断言后面包含数字的内容.{6,}
再次匹配任何角色$
断言一行答案 3 :(得分:0)
\.*\d => means a digit preceded by literal dots(`.`)
和*
表示重复(0 ~ ) numbers
字符,点(.
)。
因此,正如您所看到的,输入字符串中没有字符点(.
)。因此,正则表达式引擎通过将*
的重复数字评估为zero
,0
来尝试进行匹配。
因此,您的正则表达式可能会被解释如下。
(?=\d).{6,}
是的,这个正则表达式意味着one digit
后面跟着超过5个任意字符的数字。
但是,{6,}
表示搜索greedy
的{{1}}搜索。另一方面,possible maximum length string
模式(在这种情况下为lazy
)搜索可能的最小长度字符串。
您可以尝试使用此{6,}?
正则表达式,并与上述lazy mode
结果进行比较。
greedy