我是一个正则表达的白痴,从来没有找到一个好的教程(链接欢迎,以及指向交互式VS2010集成编辑器的指针)。
我需要以下面的形式解析字符串:
[a/b]:c/d
a, b: double with "." as possible separator. CAN be empty
c: double with "." as separator
d: integer, positive
即。有效字符串是:
[/]:0.25/2
[-0.5/0.5]:0.05/2
[/0.1]:0.05/2
;)任何人都可以提供帮助吗?
由于
答案 0 :(得分:3)
^\[(-?\d+\.?\d+?)?/(-?\d+\.?\d+?)?\]:(-?\d+\.?\d+?)/(\d+)$
捕获自己组中的每个数字。
这假设您的double值不包含小数部分是合法的。如果不是,您可以使用
^\[(-?\d+\.\d+)?/(-?\d+\.\d+)?\]:(-?\d+\.\d+)/(\d+)$
答案 1 :(得分:1)
var match = Regex.Match("[-0.5/0.5]:0.05/2", @"\[([\.\-0-9]*)/([\.\-0-9]*)\]:([\.\-0-9]*)/([\.\-0-9]*)");
if (match.Success)
{
Console.WriteLine(match.Groups[1].Value);
Console.WriteLine(match.Groups[2].Value);
Console.WriteLine(match.Groups[3].Value);
Console.WriteLine(match.Groups[4].Value);
}
答案 2 :(得分:1)
Visual Studio Gallery上有一个正则表达式编辑器:
http://visualstudiogallery.msdn.microsoft.com/en-us/55c24bf1-2636-4f94-831d-28db8505ce00
它并不广为人知,但可以在你的正则表达式中添加空格和注释。这可以使像这样的正则表达式更具可读性。以下是基于Tim Pietzcker第一个答案的示例:
var regex = @"(?x:
^ # Anchor to start of string
\[ # [
(-?\d+\.?\d+?)? # a - double
/ # /
(-?\d+\.?\d+?)? # b - double
\] # ]
: # Literal colon character
(-?\d+\.?\d+?) # c - double
/ # /
(\d+) # d - integer
$ # Anchor to end of string
)";