Vì vậy, về cơ bản bạn cần phải phù hợp trình tự của các chữ số mà không phải là trước hoặc theo sau là một dấu thập phân hoặc chữ số khác? Tại sao không thử điều đó?
[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));
}
Dường như hoạt động.
Nguồn
2016-09-29 05:58:59
Tất cả chuỗi đầu vào của bạn có định dạng '((x/y) * z)' không? – Chrono
@ Chrono: Không, đó chỉ là một chuỗi mẫu. Bất kỳ chuỗi nào sẽ làm –