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 ^