输入字符串“134.45sdfsf”传递给以下语句
System.Text.RegularExpressions.Regex.Match(input, pattern).Success;
为以下模式返回true
。
pattern = "[0-9]+"
pattern = "\\d+"
Q1)我想,到底是怎么回事!我只指定数字,而不是特殊字符或字母。所以我的模式有什么问题,如果我用上面的代码语句得到错误的返回值。
Q2)一旦我得到正确的模式以匹配数字,我如何提取字符串中的所有数字?
让我们说现在我只想以"int.int^int"
格式获取字符串中的整数(例如,"11111.222^3333"
,在这种情况下,我想要提取字符串"11111"
,{{1 }和"222"
)。
有什么想法吗?
由于
答案 0 :(得分:3)
您指定它至少包含一个数字 ,而不是所有数字。您正在寻找表达式^\d+$
。 ^和$分别表示字符串的开头和结尾。您可以阅读here。
使用Regex.Split
按任何非 -digit字符串进行拆分。例如:
string input = "123&$456";
var isAllDigit = Regex.IsMatch(input, @"^\d+$");
var numbers = Regex.Split(input, @"[^\d]+");
答案 1 :(得分:1)
它说它找到了它。
如果你想要检查整个表达式,那么:
^[0-9]+$
答案 2 :(得分:0)
Q1)两种模式都是正确的。
Q2)假设您正在寻找一个数字模式“5位数 - 点-3位数 - ^ - 4位数” - 这就是您要寻找的内容:
var regex = new Regex("(?<first>[0-9]{5})\.(?<second>[0-9]{3})\^(?<third>[0-9]{4})");
var match = regex.Match("11111.222^3333");
Debug.Print(match.Groups["first"].ToString());
Debug.Print(match.Groups["second"].ToString
Debug.Print(match.Groups["third"].ToString
我更喜欢命名的捕获组 - 它们将提供比
更清晰的访问方式