文字列内のすべての数値をゼロ(8桁である必要があります)で埋めたいです。
例えば
asd 123 rete > asd 00000123 rete
4444 my text > 00004444 my text
正規表現を使用してこれを行うことは可能ですか?特にRegex.Replace()
?
ゼロの数は、数によって異なることに注意してください。つまり、パディングされた数字は8桁の長さである必要があります。
Microsoftには、このための関数が組み込まれています。
someString = someString.PadLeft(8, '0');
そしてここにMSDNに関する記事があります
正規表現を使用するには、次のようにします。
string someText = "asd 123 rete";
someText = Regex.Replace(someText, @"\d+", n => n.Value.PadLeft(8, '0'));
スレッドは古いですが、誰かがこれを必要としているのかもしれません。
Nickonは、正規表現を使用したいと述べています。なんで?関係ありません、多分その楽しみ。SQLでインライン置換を行う必要があったため、C#正規表現を呼び出す自家製のSQL関数が役に立ちました。
パッドする必要があるものは次のようになりました。
abc 1.1.1
abc 1.2.1
abc 1.10.1
そして私は欲しかった:
abc 001.001.001
abc 001.002.001
abc 001.010.001
アルファベット順に並べ替えることができました。
これまでのところ(私が見つけた)唯一の解決策は、2つのステップで適切な長さにパディングと切り捨てを行うことでした。これはSQLであり、そのための関数を準備していなかったため、Lambdaを使用できませんでした。
//This pads any numbers and truncates it to a length of 8
var unpaddedData = "...";
var paddedData = Regex.Replace(unpaddedData , "(?<=[^\d])(?<digits>\d+)",
"0000000${digits}");
var zeroPaddedDataOfRightLength = Regex.Replace(paddedData ,"\d+(?=\d{8})","");
説明:
(?<=[^\d])(?<digits>\d+)
(?<=[^\d]) Look behind for any non digit, this is needed if there are
more groups of numbers that needs to be padded
(?<digits>\d+) Find the numbers and put them in a group named digits to be
used in the replacement pattern
0000000${digits} Pads all the digits matches with 7 zeros
\d+(?=\d{8}) Finds all digits that are followed by at exactly 8 digits.
?= Doesn't capture the 8 digits.
Regex.Replace(...,"\d+(?=\d{8})","")
Replaces the leading digits with nothing leaving the last 8.
正規表現への添付ファイルがない場合は、フォーマット文字列を使用してください。
static void Main(string[] args)
{
string myCC = "4556364607935616";
string myMasked = Maskify(myCC);
Console.WriteLine(myMasked);
}
public static string Maskify(string cc)
{
int len = cc.Length;
if (len <= 4)
return cc;
return cc.Substring(len - 4).PadLeft(len, '#');
}
「#」を0または「0」に置き換えるだけです。お役に立てば幸いです:)