0

「21A244」のようなものを分割するには、C#で正規表現を使用する必要があります。

  • 最初の 2 つの数字は 1 ~ 99 です
  • 文字は A ~ Z の 1 文字のみです
  • 最後の 3 つの数字は 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、正規表現マッチャーオブジェクトのプロパティになります。つまり

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が返されます。

正規表現は文字列と一致するため、入力文字列という1つの項目を含むコレクションを返します。

于 2012-09-28T09:07:48.303 に答える