我正在尝试删除TextBox
..
例如,代表保险的短字母代码(例如,“BCBS”代表“Blue Cross Blue Shield”):
txtDesc.text = "Blue Cross Blue Shield";
string Code = //This must be BCBS..
是否可以?请帮我。谢谢!
好吧,您可以使用正则表达式来删除不是大写 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}]");
...我相信这应该涵盖所有文化的大写字母。
string Code = new String(txtDesc.text.Where(c => IsUpper(c)).ToArray());
这是我的变体:
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]
会严重破坏英文字母以外的字符(甚至是其他拉丁字符!:-/)
快乐编码。
但是请参阅 Skeet 先生对正则表达式的回答;-)
您可以尝试使用“用星号替换小写字符”实现,但将“*”更改为“”(空白)
所以代码看起来像这样:
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);
我会将值映射到您在字典中的缩写,例如:
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());
string Code = Regex.Replace(txtDesc.text, "[a-z]", "");
没有正则表达式:
string input = "Blue Cross Blue Shield";
string output = new string(input.Where(Char.IsUpper).ToArray());
Response.Write(output);
string caps = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
string.Join("",
"Blue Cross Blue Shield".Select(c => caps.IndexOf(c) > -1 ? c.ToString() : "")
.ToArray());
我认为规范不是匹配所有大写字母,而是需要匹配所有单词中的第一个字符。这将允许不一致的输入,但从长远来看仍然是可靠的。因此,我建议使用以下代码。它在每个对象上使用一个聚合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
string Code = Regex.Replace(txtDesc.text, "[a-z]", "");
这并不完美,但应该可以工作(并通过您的 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());
}