我需要在C#中使用正则表达式来分割像“21A244”这样的东西
所以我做了这个比赛 “([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);
答案 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。
由于正则表达式与字符串匹配,因此它返回一个带有一个项目的集合,即输入字符串。