18

TextBox..の小文字を削除しようとしています。

たとえば、保険を表す短いアルファ コード (例: 'Blue Cross Blue Shield' の 'BCBS'):

txtDesc.text = "Blue Cross Blue Shield";

string Code = //This must be BCBS.. 

出来ますか?私を助けてください。ありがとう!

4

11 に答える 11

38

正規表現を使用して、大文字の AZ 以外をすべて削除できます。

using System;
using System.Text.RegularExpressions;

class Program
{
    static void Main( string[] args )
    {
        string input = "Blue Cross Blue Shield 12356";
        Regex regex = new Regex("[^A-Z]");
        string output = regex.Replace(input, "");
        Console.WriteLine(output);
    }
}

これにより、ASCII 以外の文字も削除されることに注意してください。別の正規表現は次のようになります。

Regex regex = new Regex(@"[^\p{Lu}]");

... すべての文化の大文字をカバーするべきだと思います。

于 2011-05-23T05:58:09.570 に答える
20
string Code = new String(txtDesc.text.Where(c => IsUpper(c)).ToArray());
于 2011-05-23T05:58:17.110 に答える
12

ここに私の変種があります:

var input = "Blue Cross Blue Shield 12356";
var sb = new StringBuilder();
foreach (var ch in input) {
  if (char.IsUpper(ch)) { // only keep uppercase
    sb.Append(ch);
  }
}
sb.ToString(); // "BCBS"

私は通常、正規表現を使用するのが好きですが、「大文字のみ」を選択する方法がわかりません。[A-Z]これがないと、英語のアルファベット以外の文字 (他のラテン文字でも! :-/) でひどく壊れます。

ハッピーコーディング。


しかし、正規表現の方法についてはスキート氏の回答を参照してください;-)

于 2011-05-23T06:05:00.453 に答える
7
string Code = Regex.Replace(txtDesc.text, "[a-z]", "");
于 2011-05-23T06:19:17.133 に答える
7

「小文字をスターに置き換える」実装を使用してみることができますが、「*」を「」(空白) に変更してください。

したがって、コードは次のようになります。

txtDesc.Text = "Blue Cross Blue Shield";
string TargetString = txt.Desc.Text;
string MainString = TargetString;
for (int i = 0; i < TargetString.Length; i++)
{
    if (char.IsLower(TargetString[i]))
    {
        TargetString = TargetString.Replace( TargetString[ i ].ToString(), string.Empty );
    }
}
Console.WriteLine("The string {0} has converted to {1}", MainString, TargetString);
于 2011-05-23T05:59:33.557 に答える
7

次のような辞書で、値を略語にマップします。

Dictionary<string, string> valueMap = new Dictionary<string, string>();
valueMap.Add("Blue Cross Blue Shield", "BCBS");

string Code = "";
if(valueMap.ContainsKey(txtDesc.Text))
  Code = valueMap[txtDesc.Text];
else
  // Handle

ただし、言及した機能がまだ必要な場合は、linq を使用します。

string newString = new string(txtDesc.Text.Where(c => char.IsUpper(c).ToArray());
于 2011-05-23T06:00:14.820 に答える
6

正規表現なし:

string input = "Blue Cross Blue Shield";
string output = new string(input.Where(Char.IsUpper).ToArray());
Response.Write(output);
于 2011-06-08T14:52:54.127 に答える
5
string caps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

string.Join("",
   "Blue Cross Blue Shield".Select(c => caps.IndexOf(c) > -1 ? c.ToString() : "")
                           .ToArray());
于 2011-06-03T20:07:14.760 に答える
3

すべて大文字で一致させるのではなく、すべての単語の最初の文字を一致させる必要があると思います。これにより、一貫性のない入力が可能になりますが、長期的には信頼性が高くなります。このため、次のコードを使用することをお勧めします。Matchオブジェクトのそれぞれに集計を使用しRegex、値を という文字列オブジェクトに追加しますoutput

string input = "Blue Cross BLUE shield 12356";
Regex regex = new Regex("\\b\\w");
string output = regex.Matches(input).Cast<Match>().Aggregate("", (current, match) => current + match.Value);
Console.WriteLine(output.ToUpper()); // outputs BCBS1
于 2011-06-09T14:33:27.570 に答える
2

これは完璧ではありませんが、動作するはずです (そして BCBS テストに合格します):

private static string AlphaCode(String Input)
{
    List<String> capLetter = new List<String>();
    foreach (Char c in Input)
    {
        if (char.IsLetter(c))
        {
            String letter = c.ToString();
            if (letter == letter.ToUpper()) { capLetter.Add(letter); }
        }
    }
    return String.Join(String.Empty, capLetter.ToArray());
}

そして、このバージョンは奇妙な入力シナリオを処理します (これにより、各単語の最初の文字が大文字になります)。

private static string AlphaCode(String Input)
{
    String capCase = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(Input.ToString().ToLower());

    List<String> capLetter = new List<String>();
    foreach (Char c in capCase)
    {
        if (char.IsLetter(c))
        {
            String letter = c.ToString();
            if (letter == letter.ToUpper()) { capLetter.Add(letter); }
        }
    }
    return String.Join(String.Empty, capLetter.ToArray());
}
于 2011-06-10T16:43:09.400 に答える
2
string Code = Regex.Replace(txtDesc.text, "[a-z]", "");
于 2011-06-03T19:21:42.703 に答える