C# 正则表达式(来自 perl/javascript 背景)

C# regex (coming from a perl/javascript background)

这场比赛没有给我比赛,似乎无论如何:

static String divine(int n)
{
    if (n % 3 == 0) { return String.Join("", Enumerable.Repeat("5", n).ToArray()); }

    String res = String.Join("", Enumerable.Repeat(" ", n));
    Regex ItemRegex = new Regex(@"^(\s{3}){0,}(\s{5})*$", RegexOptions.Compiled);
    Match match = ItemRegex.Match(res);

但是此 PCRE 正则表达式在 regex101.com 处表现完美:^(\s{3}){0,}(\s{5})*$

它总是贪婪地匹配小组(3组),只在需要时匹配大组,最后没有未匹配的空格。

我的问题是,我必须做什么才能使正则表达式在 C# 中按预期运行?如果我不得不猜测,在这一点上我倾向于 {,} 可能是非法的?我不知道。

我可以看到Java的影响。 @表示不需要邪恶转义转义\:

@"^(\s{3}){0,}(\s{5})*$"

如果您不知道,Java 的正则表达式很麻烦。大多数语言不是那样的。 Python,例如,使用r代替C#的@


编辑:Java脚本只能让您在字符串中进行转义,但您可以使用类似的东西:var word2 = word.replace(/\s/g, "");。实际上,语法类似于 Perl。

Java 除了转义之外别无选择,这就是为什么我假设你的意思是 Java.