2014-10-10 40 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