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.
这场比赛没有给我比赛,似乎无论如何:
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.