正则表达式模式在Lua中工作但在C#中不起作用

时间:2012-09-28 09:00:11

标签: c# regex

我需要在C#中使用正则表达式来分割像“21A244”这样的东西

  • 前两个数字可以是1-99
  • 这封信只能是1个字母,A-Z
  • 最后三个数字可以是111-999

所以我做了这个比赛 “([0-9] +)([A-Z])([0-9] +)”

但由于某些原因在C#中使用时,匹配函数只返回输入字符串。所以我在Lua中试过它,只是为了确保模式是正确的,并且在那里工作得很好。

以下是相关代码:

var m = Regex.Matches( mdl.roomCode, "(\\d+)([A-Z])(\\d+)" );

System.Diagnostics.Debug.Print( "Count: " + m.Count );

这是工作的Lua代码,以防你想知道

local str = "21A244"
print(string.match( str, "(%d+)([A-Z])(%d+)" ))

感谢您的帮助

编辑:找到解决方案

var match = Regex.Match(mdl.roomCode, "(\\d+)([A-Z])(\\d+)");
var group = match.Groups;
System.Diagnostics.Debug.Print( "Count: " + group.Count );

System.Diagnostics.Debug.Print("houseID: " + group[1].Value);
System.Diagnostics.Debug.Print("section: " + group[2].Value);
System.Diagnostics.Debug.Print("roomID: " + group[3].Value);

2 个答案:

答案 0 :(得分:1)

首先,您应该使您的正则表达式更具体一些,并限制在开头/结尾允许的数量。怎么样:

([1-9]{1,2})([A-Z])([1-9]{1,3})

接下来,捕获的结果(即parens中的3个部分)将位于正则表达式匹配器对象的Groups属性中。即。

m.Groups[1] // First number
m.Groups[2] // Letter
m.Groups[3] // Second number

答案 1 :(得分:0)

Regex.Matches(mdl.roomCode,“(\ d +)([A-Z])(\ d +)”)返回一组匹配项。如果没有匹配,那么它将返回一个空的MatchCollection。

由于正则表达式与字符串匹配,因此它返回一个带有一个项目的集合,即输入字符串。