java.util.regex 的 C# 等价物是啥?

Posted

技术标签:

【中文标题】java.util.regex 的 C# 等价物是啥?【英文标题】:What is the C# equivalent of java.util.regex?java.util.regex 的 C# 等价物是什么? 【发布时间】:2010-12-07 15:28:29 【问题描述】:

我正在将 Java 代码转换为 C#,并且需要替换使用 Java 的正则表达式。一个典型的用法是

import java.util.regex.Matcher;
import java.util.regex.Pattern;
//...

String myString = "B12";
Pattern pattern = Pattern.compile("[A-Za-z](\\d+)");
Matcher matcher = Pattern.matcher(myString);
String serial = (matcher.matches()) ? matcher.group(1) : null;

应该从匹配的目标字符串中提取捕获组。我会很感激简单的例子。


编辑:我现在添加了代码的 C# 等效项作为答案。

EDIT:Here is a tutorial 关于实际表达式的使用。

编辑:Here is a useful comparison 来自 C# 和 Java(以及 Perl。)

【问题讨论】:

@Mehrdad 谢谢。这正是我想要的,尽管这个问题从某个地方得到了反对(也许是重复的,尽管我试图搜索 SO) 不知道。不是我。受骗者通常不会投反对票。他们关门了。 @Jason:你的意思是?人们不应该在 *** 上找到他们需要的答案吗?他们应该在谷歌上试试运气,在那里他们可能会找到错误的答案? SO 被制作为寻找编程问题答案的地方。谷歌不是。 Jason w: lmgtfy 链接在这里被认为是极具攻击性和非建设性的,请不要再在任何地方发布这些链接。 @Jason 我实际上在这个问题上付出了合理的努力。我创建了 Java 代码来说明我的问题并要求 C# 中的等效功能(我已将其作为答案发布)。总而言之,我至少花了一个小时。 【参考方案1】:

System.Text.RegularExpressions.Regex class 是 .NET Framework 等效项。我链接到的 MSDN 页面包含一个简单的示例。

【讨论】:

【参考方案2】:

我在问题中创建了与 Java 代码等效的 C#:

string myString = "B12";
Regex rx = new Regex(@"[A-Za-z](\\d+)");
MatchCollection matches = rx.Matches(myString);
if (matches.Count > 0)

    Match match = matches[0]; // only one match in this case
    GroupCollection groupCollection = match.Groups;
    Console.WriteLine("serial " + groupCollection[1].ToString());

编辑(参见@Mehrdad 的有用 cmets)

原来的代码是:

// ...

MatchCollection matches = rx.Matches(myString);
foreach (Match match in matches)

    GroupCollection groupCollection = match.Groups;
    Console.WriteLine("serial " + groupCollection[1].ToString());

【讨论】:

在尝试访问 matches[0] 之前,您应该确保确实存在匹配项。否则,您将收到IndexOutOfRangeException @Mehrdad 谢谢。我将它放在一个安全的 foreach 循环中,然后尝试简化它。已编辑 是的,如果您在foreach 中使用它,最好事先不要引用Count,因为这会导致Regex 被立即评估(与您使用 foreach 获得的惰性评估相反) 我认为 Matches 没有任何延迟执行。你有没有其他说法的消息来源?

以上是关于java.util.regex 的 C# 等价物是啥?的主要内容,如果未能解决你的问题,请参考以下文章

“glob”类型模式是不是有等效的 java.util.regex ?

java.util.regex - Pattern.compile() 的重要性?

Java正则表达式java.util.regex类的简单使用

带有 UCanAccess 的 java.util.regex.PatternSyntaxException

java.util.regex.PatternSyntaxException: Unexpected internal error near index 1 ^

RE validation in Java EE(java.util.regex.Pattern)