如何仅在第二个实例后替换所有连字符

时间:2014-01-23 16:43:20

标签: c# indexof

在这样的字符串中:姓氏 - 住在南岸的一条路上。 我试图替换“,”&的所有实例“ - ”进入“”仅跳过“ - ”的第二个实例。然后我想用“,”替换“ - ”。
我目前向我们试过这个:

var all = node.InnerText.Replace(","," ");
var hyph = all.Replace("—",",").Replace("-",",");

哪个有效...除了它正在替换所有内容,我需要第二个“ - ”实例保留“,”,“ - ”和“...”的所有其他实例“ - ”改为“”。因此,当它完成时它看起来像这样:(最后,名字,住在南部,海岸的道路上。)。
当我需要它时:(姓氏,住在南岸的一条路上)。

做一些环顾四周,似乎IndexOf()是要走的路,但我不确定如何设置我的查询。我会使用这样的东西走上正确的轨道吗?或者有更好的方法来解决这个问题吗?说实话,我并不完全确定,我仍然在学习C#,如果这个措辞措辞不合适或者说不合适,那就很抱歉。

int position = dash.IndexOf(find);
if (position > 1)
{
return dash;
}
return dash.Substring(1, position) + replace + dash.Substring(postion + find.Length);

在每种情况下都是:

姓氏 - 这里的一些文字

姓氏 - 某种文字

姓氏 - 更多文字,这里

姓氏 - 更多文字在这里

只需要:

姓氏,这里有一些文字。

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

使用正则表达式执行此操作,查找搜索运算符并将其设置为在第一个之后搜索所有内容。很抱歉在电话中回答这个问题,所以我现在无法查阅。

答案 1 :(得分:1)

你去吧

int firstHyph = all.IndexOf('-'); // find the first hyphen
int secondHyph = all.IndexOf('-', firstHyph + 1); // find the second hyphen
var sb = new StringBuilder(all);
sb[secondHyph] = '#'; // replace the second hyphen with some improbable character
// finally, replace all hyphen and whatever you need and change that 
// "second hyphen" (now sharp) to whatever you want
var result = sb.ToString().Replace("-", " ").Replace("#", ",");    

答案 2 :(得分:1)

一个简单而独特的解决方案

using System;
using System.Text;
using System.Collections.Generic;
using System.Linq;
using System.Diagnostics;

public class Test
{
    public static void Main()
    {
        string all = Convert.ToString("In every case it will be last name — some text here OR last name — some-sort of text OR last-name — more text, here OR last name — more-text here").Replace(",", " ");
        int hyph1 = all.IndexOf('—');
        int hyph2 = hyph1 + all.Substring(++hyph1).IndexOf('—');
        string partial = all.Substring(0, ++hyph2).Replace("—", " ");
        string res = String.Concat(partial, "—", all.Substring(++hyph2).Replace("—", " ").Replace("-", ","));
        Console.Write(res.ToString());
    }
}

见小提琴:

http://ideone.com/wWCGeA