1

「1y 250 2y 32% 3y otherjibberish」のような文字列があります。

私の最終的な目標は、それを次のように分割することです。

これらの分割の間の主な「セパレーター」は、「\d+y」パターンです。Regex (C# 4.0) を使用すると、Matches 関数を使用して数字の後に「y」を一致させることができますが、その一致に続いて次の一致に先行するすべてのものを取得する方法がわかりません。

それを行う方法はありますか?

うまくいけば、それは理にかなっています....とても感謝しています - kcross

4

2 に答える 2

2

「MatchCollection」を使用して、出現に応じて文字列を分割できます。以下の例は、ほとんどあなたが望むことを行います。各文字列の右側の空白文字は削除されません。

コード:

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;

namespace Q11438740ConApp
{
    class Program
    {
        static void Main(string[] args)
        {
            string sourceStr = "1y 250 2y 32% 3y otherjibberish";
            Regex rx = new Regex(@"\d+y");
            string[] splitedArray = SplitByRegex(sourceStr, rx);

            for (int i = 0; i < splitedArray.Length; i++)
            {
                Console.WriteLine(String.Format("'{0}'", splitedArray[i]));
            }

            Console.ReadLine();
        }

        public static string[] SplitByRegex(string input, Regex rx)
        {
            MatchCollection matches = rx.Matches(input);
            String[] outArray = new string[matches.Count];
            for (int i = 0; i < matches.Count; i++)
            {
                int length = 0;
                if (i == matches.Count - 1)
                {
                    length = input.Length - (matches[i].Index + matches[i].Length);
                }
                else
                {
                    length = matches[i + 1].Index - (matches[i].Index + matches[i].Length);
                }

                outArray[i] = matches[i].Value + input.Substring(matches[i].Index + matches[i].Length, length);
            }

            return outArray;
        }
    }
}

出力:

'1y 250 '
'2y 32% '
'3y otherjibberish'

「ソリューション」7z ファイル: Q11438740ConApp.7z

于 2012-07-11T18:45:54.577 に答える
0

これは実際には非常に簡単でした... Regex.Split() メソッドを使用しただけです。

于 2012-07-11T18:43:37.837 に答える