0

我需要在 C# 中使用正则表达式来拆分类似“21A244”的内容,其中

  • 前两个数字可以是 1-99
  • 字母只能是1个字母,AZ
  • 后三位可以是 111-999

所以我做了这场比赛“([0-9]+)([AZ])([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);
4

2 回答 2

1

首先,您应该使您的正则表达式更加具体,并限制开始/结束时允许的数字数量。怎么样:

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

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

m.Groups[1] // First number
m.Groups[2] // Letter
m.Groups[3] // Second number
于 2012-09-28T09:06:24.520 回答
0

Regex.Matches(mdl.roomCode, "(\d+)([AZ])(\d+)") 返回匹配的集合。如果没有匹配,那么它将返回一个空的 MatchCollection。

由于正则表达式匹配字符串,它返回一个集合,其中包含一项,即输入字符串。

于 2012-09-28T09:07:48.303 回答