2013-07-30 432 views
0

我正在嘗試查找字符串的大寫部分,然後在盲文語言中插入兩個代表Double Capital符號的字符。我這樣做的目的是設計一個能夠從普通文本翻譯成盲文的翻譯人員。 我舉一個例子belo。 英文字符串:我的變量是IEnumerable類型的。 盲文:,我的變量的類型是,IE-numberable。 我也希望在IE數字破折號只打破有大寫和小寫的單詞,但不能在標點符號,空格,數字或其他符號前。如何找到一個字符串的大寫字符串?

非常感謝您的回答。

+9

什麼你有沒有嘗試過?你有什麼麻煩?你問如何循環字符串中的字符?如何檢查一個字符是否大寫?如何彙總結果? – SLaks

+0

我試圖找到像這樣的字符串的大寫字母: – user2227354

+0

基本上,我試圖找到myVARIABLE或IEnumerable的大寫部分。然後,我想要取出該部分字符串並插入「,,」,這是盲文語言中的雙帽符號,因此字符串將如下所示:,,即可數字。 – user2227354

回答

4

我從來沒有聽說過「雙重資本」的標誌,所以我讀了它here。從我所知道的情況來看,這應該適合你的需求。

您可以使用此找到兩個或多個大寫(大寫)的任何序列在串拉丁文字母或連字符:

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 

您可以使用此手單,雙帽itals:

var input = "McGRAW-HILL"; 
var result = Regex.Replace(input, "[A-Z-]([A-Z-]+)?", 
     m => (m.Groups[1].Success ? ",," : ",") + m.Value); // ,Mc,,GRAW-HILL 
+0

非常感謝您花時間寫下這個答案。我非常感謝。我真的這樣做。 – user2227354

+0

@ user2227354很高興爲您提供幫助。這裏有一個關於SO提問的小貼士:總是顯示你所嘗試過的內容,並解釋它爲什麼不起作用(錯誤,結果不佳等)。對於詢問正則表達式模式的問題,**是關鍵**,用於顯示要匹配的輸入字符串以及不想匹配的字符串,並且在正則表達式替換的情況下,請至少顯示幾個輸入字符串與他們期望的產出。這將有助於您避免未來的選票投票和結束投票。 –

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); 
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每個字符這將循環如果characater是上之前和之後(替換使用所需盲文字符)否則附加的字符輸出插入_

0

這個代碼可以解決你的problema

 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]; 
     } 
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, ",,"); 
} 
相關問題