我试图找到字符串的大写部分,然后在盲文语言中插入两个代表Double Capital符号的字符。我这样做的目的是设计一个可以从普通文本翻译成盲文的翻译器。 我将举个例子。 英文字符串:我的变量是IEnumerable类型。 盲文:,我的变量是类型,IE-numberable。 我还希望IE-numerable中的破折号只能破坏具有大写和小写的单词,但不能在标点符号,空格,数字或其他符号前面。
提前感谢您的回答。
答案 0 :(得分:4)
我从来没有听说过“双重资本”的标志,所以我读了here。据我所知,这应该符合您的需求。
您可以使用它来查找字符串中两个或多个大写(majuscule)拉丁字母或连字符的任何序列:
var matches = Regex.Matches(input, "[A-Z-]{2,}");
您可以使用它来插入双重大写符号:
var result = Regex.Replace(input, "[A-Z-]{2,}", ",,$0");
例如:
var input = "this is a TEST";
var result = Regex.Replace(input, "[A-Z-]{2,}", ",,$0"); // this is a ,,TEST
您可以使用它来处理单首和双首字母:
var input = "McGRAW-HILL";
var result = Regex.Replace(input, "[A-Z-]([A-Z-]+)?",
m => (m.Groups[1].Success ? ",," : ",") + m.Value); // ,Mc,,GRAW-HILL
答案 1 :(得分:0)
您可以使用简单的正则表达式找到它们:
using System.Text.RegularExpressions;
// ..snip..
Regex r = new Regex("[A-Z]"); // This will capture only upper case characters
Match m = r.Match(input, 0);
System.Text.RegularExpressions.Match
类型的变量m
将包含一系列捕获。如果只有第一场比赛很重要,您可以直接查看其Index
属性。
现在,您可以使用String.Insert
:
input = input.Insert(m.Index, doubleCapitalSign);
答案 2 :(得分:0)
不确定这是不是你想要的?
var inputString = string.Empty; //Your input string here
var output = new StringBuilder();
foreach (var c in inputString.ToCharArray())
{
if (char.IsUpper(c))
{
output.AppendFormat("_{0}_", c);
}
else
{
output.Append(c);
}
}
这将遍历inputString
中的每个字符,如果字符位于上方,则在前后插入_
(用您想要的盲文字符替换它),否则将字符附加到输出。
答案 3 :(得分:0)
此代码可以解决您的问题
string x = "abcdEFghijkl";
string capitalized = string.Empty;
for (int i = 0; i < x.Length; i++)
{
if (x[i].ToString() == x[i].ToString().ToUpper())
capitalized += x[i];
}
答案 4 :(得分:0)
您是否尝试过使用 Char.IsUpper 方法 http://msdn.microsoft.com/en-us/library/9s91f3by.aspx
这是使用该方法解决类似问题的另一个类似问题 Get the Index of Upper Case letter from a String
答案 5 :(得分:0)
如果您只想找到大写字母的第一个索引:
var firstUpperCharIndex = text // <-- a string
.Select((chr, index) => new { chr, index })
.FirstOrDefault(x => Char.IsUpper(x.chr));
if (firstUpperCharIndex != null)
{
text = text.Insert(firstUpperCharIndex.index, ",,");
}