3
List<int> ids = ExtractIds("United Kingdom (656) - Aberdeen (7707)");

上記のリストは、括弧内から値を削除する以下のメソッドによって入力する必要があります。

match.Value を文字列として使用し、それを List< string > に割り当てると、問題なく動作するようです。しかし、それを整数に変換しようとすると、「入力文字列の形式が正しくありませんでした」というエラーが表示されます。

私は何を間違っていますか?

public List<int> ExtractIds(string str)
{
    MatchCollection matchCollection = Regex.Matches(str, @"\((.*?)\)");
    List<int> ExtractedIds = new List<int>();
    foreach (Match match in matchCollection)
    {
        int theid = int.Parse(match.Value);
        ExtractedIds.Add(theid);
    }

    return ExtractedIds;
}
4

2 に答える 2

9

match.Groups[1].Valueかっこ内の文字列を取得する代わりに使用match.Valueします。つまり、かっこ自体は含めません。

\d*?かっこ内のものではなく、数字のみを一致させるために代わりに使用してください.?*!

は閉じ括弧と一致しない?ため、もう必要ありません。\d

look in に切り替える代わりに、次のような正規表現でlookaroundsGroups[1]を使用できます。

(?<=\()\d(?=\))

Match数字自体のみが含まれていることを確認します。

于 2013-03-13T15:36:53.970 に答える
0

コードをデバッグすると、match.Value に数字の周りの括弧が含まれているため、明らかに例外がスローされます。

パターンを @"(\d)+" に書き換えると、番号がグループ化されますが、括弧は無視されます。

public List<int> ExtractIds(string str)
{
     MatchCollection matchCollection = Regex.Matches(str, @"(\d)+");
     List<int> ExtractedIds = new List<int>();
     foreach (Match match in matchCollection)
     {
         int theid = int.Parse(match.Value);
         ExtractedIds.Add(theid);
      }
      return ExtractedIds;
 }

お役に立てれば。

于 2013-03-13T16:23:48.927 に答える