-1

次のような文字列があります。

"PID||000000|Z123345|23345|SOMEONE^FIRSTNAME^^^MISS^||150|F|1111||1 DREYFUS CLOSE^SOUTH CITY^COUNTY^^POST CODE^^^||0123 45678910^PRN^PH^^^^0123 45678910^^~^^CP^^^^^^~^NET^^^^^^^||||1A|||||A||||||||N||||||||||";

区切り文字「|」を削除しようとしています 30 番目の「|」以降の文字 出力文字列は次のようになります。

"PID||000000|Z123345|23345|SOMEONE^FIRSTNAME^^^MISS^||150|F|1111||1 DREYFUS CLOSE^SOUTH CITY^COUNTY^^POST CODE^^^||0123 45678910^PRN^PH^^^^0123 45678910^^~^^CP^^^^^^~^NET^^^^^^^||||1A|||||A||||||||N";

できるだけ少ないコードを使用してそれを実行しようとしていますが、あまり運がありません。どんな助けやアイデアも素晴らしいでしょう。

4

6 に答える 6

5

TrimEndメソッドを使用できます

string text = "stuff||||N||||||||||";
string result = text.TrimEnd('|'); //Result is stuff||||N
于 2013-07-23T21:07:15.300 に答える
1

正規表現はそのトリックを行う必要があります:

var regex = new Regex(@"^([^\|]*\|){0,30}[^\|]*");
var match = regex.Match(input);
if(match.Success)
{
    var val = match.Value;
}
于 2013-07-23T21:30:34.910 に答える
0
// Get the indexes of all the | characters.
int[] pipeIndexes = Enumerable.Range(0, s.Length).Where(i => s[i] == '|').ToArray();

// If there are more than thirty pipes:
if (pipeIndexes.Length > 30)
{
    // The former part of the string remains intact.
    string formerPart = s.Substring(0, pipeIndexes[30]);

    // The latter part needs to have all | characters removed. 
    string latterPart = s.Substring(pipeIndexes[30]).Replace("|", "");

    s = formerPart + latterPart;
}
于 2013-07-23T21:10:31.957 に答える