下のようなリストがあり、リストの中に "aaa" という文字列を追加しようとした時、
既に同じ文字列があった場合、同じ文字列が入らないようにしたく、
「チルダ(ASCIIコード:7E) + 添え字(19999まで)」4" に置き換えたいです。
を付与した文字に置き換えて追加したいです。
下の例では、最終的に target の変数の中身を "aaa
List<string> words = new List<string>() { "aaa", "aaa~1", "aaa~2", "bbb", "cdcd", "eee~1", "eee~3", "eee~5", "aaa~3", "ddd~1", "aaa~5", "aaa~12", "aaa~146", "aaa~1559", "aaa ~125", }; string target = "aaa";
考えている手順としては、
・リストの中から「target + チルダ(ASCIIコード:7E) + 4桁以内の数字」 という書式の文字列を抜き出す
・その中からさらに数字のみを抜き出し、空いている添え字の中から最小値を検索する
・「target + チルダ(ASCIIコード:7E) + 検索した添え字」 を作成する
としようと思っているのですが、最初の項目での処理が上手くいきません。
正規表現を使った方がよいのかと感じており、下の様に処理を作成してみました。
static void Main(string[] args) { List<string> words = new List<string>() { "aaa~1", "aaa~2", "bbb", "cdcd", "eee~1", "eee~3", "eee~5", "aaa~3", "ddd~1", "aaa~5", "aaa~12", "aaa~146", "aaa~1559", "aaa ~125", }; string target = "aaa"; List<string> matches = new List<string>(); foreach (string word in words) { if (word.StartsWith(target) && Regex.IsMatch(word, @"[0-9]$") ) { Console.WriteLine(word + " true"); matches.Add(word); } else { Console.WriteLine(word + " false"); } } Console.ReadKey(); }
これだと、末尾に数字があるもの全てがtrue となってしまい、うまく抽出できていませんでした。
ASCIIコードが含まれる場合に、正規表現でどのように表現したらよいかもいまいちわからずで、
ご助言いただけないでしょうか?
宜しくお願い致します。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/07/19 07:49
2019/07/19 08:01
2019/07/19 08:09
2019/07/19 08:14
2019/07/19 08:17
2019/07/19 08:23
2019/07/19 08:24
2019/07/19 08:32
2019/07/19 08:45