コンマを含むリストがありますが、同じリストに削除したくない他のコンマもあります。テキストのすべての行の最後のコンマだけを削除する方法はありますか?
4 に答える
カンマの場合は最後の文字を削除することを意味する場合は、次のように置き換える必要があり
^(.*),$
ます$1
a,b,c,
に置き換えられa,b,c
、a,b,c,d
正規表現と一致しません。
最後のコンマを削除するだけの場合は、その後に何かがある場合でも、次のように置き換えます^(.*),([^,]*)$
。$1$2
a,b,c,
に置き換えられa,b,c
、a,b,c,d
に置き換えられますa,b,cd
RegExは素晴らしいですが、読みにくいです。C#のような言語でより詳細なアルゴリズムを使用したい場合は...
public string RemoveLastComma(string input)
{
if (input.Contains(",") == false)
return input;
int position = 0;
for (int i = input.Length; i > 0; i--)
{
if (input.Substring(i-1, 1) == ",")
{
position = i;
break;
}
}
var firstSegment = input.Substring(0, position-1);
var lastSegement = input.Substring(position, (input.Length - position));
return firstSegment + lastSegement;
}
使用している言語がわからないため、最後のコンマをキャプチャする正規表現のみを提供できます。
,(?!.*,)
この正規表現の一致を空白に置き換えると、最後のコンマが削除されます。
したがって、正規表現は先読みを使用して、一致したコンマの後にコンマがないことをアサートします。ルックアラウンドの良いところは、キャプチャされないことです。そのため、後方参照などに置き換える必要はありません。
最も簡単な方法は、次のような正規表現ステートメントを使用することです。
replace( /,\s*$/, '', [コンテンツ] );
これは、カンマ文字 (,) とそれに続く行末 ($) の空白 (\s*) を探します。言語またはプログラムによっては、各行を個別に渡すか、複数行フラグを設定する必要があります。