1

文字列から 3 つの使用可能なフィールドを抽出しました。共通の区切り文字はなく、空白とタブの両方を使用できます。

まず、私がやっていることは、すべての二重空白とタブを「**」に置き換えることです

与えられた文字列:

続き = ガリペル 2012 年 4 月 4 日 16.03.03 5678

私は使っている:

cont.Replace(" ", "**").Replace(" ", "**").Replace(" ", "**").Replace("**", "").Trim()

答えは次のようになります。

****** ガリペル******** 2012 年 4 月 4 日 16.03.03************************ 5678**** *

アプローチは正しいですか?ここから素材を抽出するにはどうすればよいですか?文字列データ型のすべての抽出が必要です。

4

5 に答える 5

3

使用するだけString.Splitです:

var fields = cont.Split(new[] { " ", "\t" },
                        StringSplitOptions.RemoveEmptyEntries);

追加StringSplitOptions.RemoveEmptyEntriesすると、複数の連続したタブやスペースがある場合、結果を抽出するときに「1 つとしてカウント」されるようになります。

別のオプションは、正規表現を使用することです。

于 2012-04-23T10:19:39.703 に答える
1

正規表現グループを使用して、名前、日付、数値の3つの値を見つけることができます。

グループは(?<group_name> <regex_expr>)として定義されます

だからあなたは書くことができます

            Regex regex = new Regex("(?<name>(\\S*))(\\s*)(?<date>((\\S*)\\s(\\S*)))(\\s*)(?<number>(\\d*))");
            Match match = regex.Match(yourString);
            if (match.Success)
            {
                string name = match.Groups["name"].Value;
                string date = match.Groups["date"].Value;
                string number = match.Groups["number"].Value;
            }

\ s *は、タブを含む空白のシーケンスに一致します。\ S *は、空白以外の文字のシーケンスに一致します。\d*は数字のシーケンスに一致します。

于 2012-04-23T12:05:04.197 に答える
0

いいえ。他の区切り文字に置き換える必要はありません。String の split 関数を使用して、区切り文字として「スペース」を指定できます。たとえば、VB.Net の場合:

Dim value As String() = cont.split(CChar(" "))

これにより、値にアクセスできる文字列配列が得られます: value(0)、value(1)、および value(2)

于 2012-04-23T10:23:14.370 に答える
0
(new Regex("\\s+")).Split(yourstring)

http://msdn.microsoft.com/en-us/library/8yttk7sy.aspx

于 2012-04-23T10:19:48.223 に答える
0
var myText="cont = Gallipelle 04/04/2012 16.03.03 5678";
var splitString=myText.split(" ");

// splitString[1] == Gallipelle 
// splitString[2] ==  04/04/2012
// splitString[3] == 16.03.03 
// splitString[4] == 5678
于 2012-04-23T10:21:08.020 に答える