【问题标题】: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# 等效项作为答案。

EDITHere is a tutorial 关于实际表达式的使用。

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

【问题讨论】:

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

标签: c# java regex


【解决方案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 没有任何延迟执行。你有没有其他说法的消息来源?
    猜你喜欢
    • 2014-05-08
    • 1970-01-01
    • 1970-01-01
    • 2011-01-19
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2010-09-17
    相关资源
    最近更新 更多