我有一个示例字符串'((1/1000)*2375.50)'
我想获得1和1000这是一个INT
我尝试了这个REGEX表达式:
-?\d+(\.\d+)?
=>这匹配1, 1000, and 2375.50
-?\d+(?!(\.|\d+))
=>这匹配1, 1000, and 50
-?\d+(?!\.\d+&(?![.]+[0-9]))?
=> 1, 1000, 2375, and 50
我必须使用什么表达来匹配(1 and 1000
)?
答案 0 :(得分:4)
所以基本上你需要匹配小数点前面或后面跟着小数点或其他数字的数字序列?为什么不试试呢?
[TestCase("'((1/1000)*2375.50)'", new string[] { "1", "1000" })]
[TestCase("1", new string[] { "1" })]
[TestCase("1 2", new string[] { "1", "2" })]
[TestCase("123 345", new string[] { "123", "345" })]
[TestCase("123 3.5 345", new string[] { "123", "345" })]
[TestCase("123 3. 345", new string[] { "123", "345" })]
[TestCase("123 .5 345", new string[] { "123", "345" })]
[TestCase(".5-1", new string[] { "-1" })]
[TestCase("0.5-1", new string[] { "-1" })]
[TestCase("3.-1", new string[] { "-1" })]
public void Regex(string input, string[] expected)
{
Regex regex = new Regex(@"(?:(?<![.\d])|-)\d+(?![.\d])");
Assert.That(regex.Matches(input)
.Cast<Match>()
.Select(m => m.ToString())
.ToArray(),
Is.EqualTo(expected));
}
似乎工作。
答案 1 :(得分:3)
您可以使用:
(?<!\.)-?\b\d+\b(?!\.)
(?<!\.)
- 号码前没有句号。-?
- 可选减号\b\d+\b
- 号码。包含在单词边界中,因此无法与其他数字匹配(例如,与1234
中的12345.6
不匹配)。这与2
中的2pi
不符。(?!\.)
- 号码后没有句号。答案 2 :(得分:1)
string pattern = @"\(\(([\d]+)\/([\d]+)\)\*";
string input = @"'((1/1000)*2375.50)'";
foreach (Match match in Regex.Matches(input, pattern))
{
Console.WriteLine("{0}", match.Groups[1].Value);
Console.WriteLine("{0}", match.Groups[2].Value);
}