2016-01-28 141 views
2

我有以下字符串子串特定字包含它們之間特殊字符

string test = "viv-ek is a good boy.Mah - esh is Cra - zy."; 

我想從該字符串

得到一些只有"-"與文字之間有一部分具有" - "{"Vivek","Mahesh","Crazy"}話。

+0

如果這些( 「 - 」 & 「 - 」)是唯一的可能並且不會打擾其他部分,'string.Replace'和'string.Split'對你來說是很好的工具......: ) – Ian

+0

試着用'test.Replace(' - ','').Replace(' - ','')' –

+0

你確切的問題是什麼?每個人都發布了關於用字符串替換字符' - '的答案。如果這不是必需的答案,那麼解釋一下你的問題。 – Kira

回答

0

你可以找到以下的正則表達式你的話:

\b\w+(?:\s-\s|-)\w+\b 

(?:\s-\s|-)用空字符串替換''字符串匹配的結果。

+0

謝謝@Kasramvd的快速回復 – dhiraj

0

這可能做的伎倆爲您

string test = "viv-ek is a good boy.Mah - esh is Cra - zy."; 
test = test.Replace(" -", "-").Replace("- ", "-").Replace(".", ". "); 
//Or 
//test = test.Replace(" - ", "-").Replace(".", ". "); 
string[] allwords = test.Split(' '); 
List<string> extractedWords=new List<string>(); 
foreach(string wrd in allwords) 
{ 
    if(wrd.Contains("-")) 
    { 
     extractedWords.Add(wrd.Replace("-", "")); 
    } 
} 
0

如果你只需要選擇那些話使用:

string test = "viv-ek is a good boy.Mah - esh is Cra - zy."; 
var words = 
    Regex 
     .Matches(test, @"(?<part>\w+)(\s*-\s*(?<part>\w+))+\b") 
     .Cast<Match>() 
     .Select(
      x => string.Join(
       string.Empty, 
       x.Groups["part"].Captures.Cast<Capture>().SelectMany(capture => capture.Value))) 
     .ToList(); 

words是包含 「維韋克」 名單, 「馬赫什」,「瘋狂」。

DEMO

更換的話會同樣的方式工作:

var replacingValues = new Dictionary<string, string> { { "Crazy", "XXX" } }; 
var test = "viv-ek is a good boy.Mah - esh is Cra - zy."; 
var replacedTest = 
    Regex.Replace(
     test, 
     @"\b(?<part>\w+)(\s*-\s*(?<part>\w+))+\b", 
     match => 
      { 
       var word = string.Join(string.Empty, match.Groups["part"].Captures.Cast<Capture>().SelectMany(capture => capture.Value)); 
       string replacingValue; 
       return replacingValues.TryGetValue(word, out replacingValue) ? replacingValue : match.Value; 
      }); 

replacedTest包含viv-ek is a good boy.Mah - esh is XXX.

DEMO

+0

謝謝@維拉環真的幫助 – dhiraj

+0

@dhiraj我添加了一個簡單的示例來替換使用字典來檢查是否做。 –

相關問題