文字列xx:xx:xx形式からの正規表現抽出


8

私はプログラミングに非常に慣れていないので、質問があります。Regexメソッドを使用して文字列から時間、分、秒を抽出して配列に入れようとしていますが、これまでのところ、1つの数値しか使用できません。

 int initialDay D = 0;
 string startDay = Console.ReadLine(); //input:  "It started 5 days ago"
 var resultString = Regex.Match(startDay, @"\d+").Value; 
 initialDay = Int32.Parse(resultString);   // initialDay here equals 5.

文字列06:11:33から読み取り、これらの時間、分、秒を整数の配列に変換するにはどうすればよいですか?したがって、結果の配列は次のようになります。

int[] array = new int[] {n1, n2, n3}; // the n1 would be 6, n2 would be 11 and n3 would be 33

よろしくお願いします!

回答:


10

入力がこの形式(dd:dd:dd)の場合、実際には正規表現は必要ありません。String.Split()メソッドを使用できます。例えば:

string test = "23:22:21";
string []res = test.Split(':');

res配列には、要素として「23」、「22」、「21」が含まれます。次に、それらをintに変換する必要があります。


ありがとう、これはまさに私が必要としたものです。たぶん私はRegexで自分より先を行っていました。
Igor Cherkasov

8

正規表現を学ぼうとしているのでない限り、この構文解析を自分で実行する理由はありません。

TimeSpan.Parse()このタスクのメソッドを使用します。


4

string.Split()区切られ:た要素の配列を取得するために使用できます。次にint.Parse、要素と要素をループして整数配列に割り当てます。

string[] buffer = startDay.Split(':');
int[] array = new int[buffer.Length];
for (int i = 0; i < buffer.Length; i++)
{
    array[i] = int.Parse(buffer[i]);
}

または、Linqを使用Select()して解析を行うこともできます。

int[] array = startDay.Split(':').Select(e => int.Parse(e)).ToArray();

4

Regex.Matches(string input, string pattern)このように使用してください:

var results = Regex.Matches(startDay, @"\d+");
var array = (from Match match in results
             select Convert.ToInt32(match.Value))
            .ToArray();


4

RegExの方法:

var pattern = @"(\d{1,2})\s?\:\s?(\d{1,2})\s?\:\s?(\d{1,2})";
var input = "06 : 11 : 33";
var arr = Regex.Matches(input, pattern)
    .Cast<Match>()
    .SelectMany(x => x.Groups.Cast<Group>()
    .Skip(1)
    .Select(y => int.Parse(y.Value)))
    .ToArray();

Console.WriteLine(string.Join("\n", arr));

出力:

06
11
33

regex101


3

単純な文字列として日付がある場合は、splitメソッドを使用できます。

string dataString = "06 : 11 : 33";
string[] arrayStr = dataString.Split(':');

次に、System.Linqを使用してintリストを作成できます。

List<int> intList = arrayStr.Select(p => Convert.ToInt32(p)).ToList();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.