2014-10-10 37 views
0

我試圖確保一個短語列表通過查找它們並以\ n +短語替換它們自己的行開始。例如我如何替換C#中的確切短語string.replace

your name: joe your age: 28 

成爲

my name: joe 
your age: 28 

我有,我拉和循環並做替換短語的文件。除了在某些短語中有兩個單詞,我使用\ b來表示短語開始和結束的位置。

這似乎不起作用,任何人都知道爲什麼?

示例 - 字符串是'名稱:xxxxxx'不會被編輯。

output = output.Replace('\b' + "Name" + '\b', "match"); 
+4

它看起來像你混在一起字符串替換'string.Replace'和正則表達式替換'Regex.Replace' – juharr 2014-10-10 12:16:44

+1

ahhhhhhhhhhhhh,也即時在匹配字符串 – Fearghal 2014-10-10 12:17:36

+0

開始離開了@請把一個答案仍然質疑 – Fearghal 2014-10-10 12:23:54

回答

0

得到它

for (int headerNo=0; headerNo<headersArray.Length; headerNo++) 
{ 
    string searchPhrase = @"\b" + PhraseArray[headerNo] + @"\b"; 
    string newPhrase = "match"; 
    output = Regex.Replace(output, searchPhrase, newPhrase); } 
+0

對於後來的加入道歉,以爲我發佈了這個,但頁錯誤' – Fearghal 2014-10-10 12:50:44

-1

下面你可以做到這一點的例子:

output = output.Replace("your", "\nyour"); 
+0

這不起作用。 'your'就是一個例子,如果我有2個搜索關鍵字,比如CPU和CPU價格,它會搞砸並且找到兩次CPU。我需要使用\ b – Fearghal 2014-10-10 12:28:16

1

使用正則表達式,佔任何數量的單詞與任意數量的空格:

using System.Text.RegularExpressions; 

Regex re = new Regex("(?<key>\\w+(\\b\\s+\\w+)*)\\s*:\\s*(?<value>\\w+)"); 
MatchCollection mc = re.Matches("your name: joe your age: 28 "); 

foreach (Match m in mc) { 
    string key = m.Groups("key").Value; 
    string value = m.Groups("value").Value; 

    //accumulate into a list, but I'll just write to console 
    Console.WriteLine(key + " : " + value); 
} 

這裏是一些e xplanation:

  • 假設你想在冒號左邊是什麼(:)被稱爲關鍵,什麼是正確的 - 一個
  • 這些鍵/值對至少分隔一次空格。正因爲如此,價值只有一個詞(否則我們會有歧義)。

上述正則表達式使用命名組來使代碼更具可讀性。

+0

我不知道值28或喬,所以我只需要'我的名字'和'你的年齡' – Fearghal 2014-10-10 12:52:30

+0

@ Fearghal :檢查上面的代碼 - 我沒有硬編碼的值'28'或'joe',你可以給它提供任何字符串,作爲一組鍵值對來解析。 – Neolisk 2014-10-10 12:53:55

+0

對不起,我的不好,誤解了。 MatchCollection mc = re.Matches(「你的名字:喬你的年齡:28」);是字符串的例子嗎? – Fearghal 2014-10-10 12:54:50