0

我正在尝试查找字符串的大写部分,然后插入两个代表盲文语言中双大写符号的字符。我这样做的目的是设计一个可以将常规文本翻译成盲文的翻译器。下面我举个例子。英文字符串:我的变量是 IEnumerable 类型。盲文: ,我的变量是 ,,IE-numberable 类型。我还希望 IE-numerable 中的破折号仅破坏具有大写和小写字母的单词,但不在标点符号、空格、数字或其他符号前面。

非常感谢您的回答。

4

6 回答 6

4

我从未听说过“双资本”标志,所以我在这里阅读了它。据我所知,这应该适合您的需求。

您可以使用它来查找字符串中两个或多个大写(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
于 2013-07-30T21:18:17.940 回答
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);

m类型变量System.Text.RegularExpressions.Match将包含捕获的集合。如果只有第一个匹配很重要,您可以Index直接检查其属​​性。

现在您可以在该位置插入所需的字符,使用String.Insert

input = input.Insert(m.Index, doubleCapitalSign);
于 2013-07-30T21:16:52.753 回答
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如果字符在上面,它会在_之前和之后插入一个(将其替换为您想要的盲文字符),否则将字符附加到输出中。

于 2013-07-30T21:17:08.087 回答
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];
        }
于 2013-07-30T21:20:59.790 回答
0

您是否尝试过使用Char.IsUpper方法 http://msdn.microsoft.com/en-us/library/9s91f3by.aspx

这是另一个类似的问题,它使用该方法来解决类似的问题 Get the Index of Upper Case letter from a String

于 2013-07-30T21:21:07.420 回答
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, ",,");
}
于 2013-07-30T21:21:40.310 回答