查找任何字符串中间或右侧的子字符串

时间:2013-09-19 13:23:47

标签: c# regex

我想替换任何不在左边的子字符串。像,

  1. 输入:“ComputerPart”

    查找substring =“t” 替换substring =“success”

    输出 CompusuccesserParsuccess

  2. 输入:“topaz”

    查找substring =“t” 替换substring =“success”

    输出 topaz // t来自字符串'topaz'的第一个位置(左侧),因此不应替换它。

  3. 输入:“问题”

    查找substring =“t” 替换substring =“success”

    输出 quessuccessions //这次应该替换为字符串'questions'中间的't'

  4. 为了达到这个目的,请帮我在C#中找到一个正则表达式模式以及实现此目的的任何代码示例。

4 个答案:

答案 0 :(得分:1)

您正在寻找左侧的word boundary

\Bt

here on regexr

\B是一个零宽度断言,匹配位置左侧和右侧是单词字符(或非单词字符)。所以这里你在\B的右边有一个“t”,所以只有在“t”的左边也是一个单词字符时它才会匹配。

换句话说:它取代了不在“单词”开头的每个“t”。

所以我现在在c#中测试了它:

string[] myStrings = { "ComputerPart",
    "topaz",
    "questions"
};

Regex reg = new Regex(@"\Bt");

foreach (string str in myStrings) {
    Console.Out.WriteLine(reg.Replace(str, "success") );
}

它产生的输出与regexr完全相同:

  

CompusuccesserParsuccess
  黄玉
  quessuccessions

答案 1 :(得分:0)

怎么样:

int pos = text.IndexOf("t");
if(pos>0)
   text = text.Replace("t", "Success");

我是否得到你的家庭作业: - )

答案 2 :(得分:0)

这次我想要更多的家庭作业!

string readText = File.ReadAllText(path);
string[] lines = readText.Split(Environment.NewLine);
string output;

foreach(string line in lines)
{
    int pos = text.IndexOf("t");
    if(pos>0)
       text = text.Replace("t", "Success");

    output += text + Environment.NewLine;
}

File.AppendAllText(newPath, output);

答案 3 :(得分:0)

我想这就是你需要的,

string[] inputstrings = { "ComputerPart", "topaz", "questions" };//An array of input strings to manipulate.
string output = "";
Regex rgx = new Regex("t");//Regex pattern to match occurence of 't'.
foreach (string inputstring in inputstrings)//Iterate through each string in collection.
{
  output = rgx.Replace(inputstring, "success", int.MaxValue, 1);//Replace each occurence of 't' excluding those occurring at position [0] in inputstring.
  MessageBox.Show(output);//Show output string.
}

我所做的是:

  • 遍历集合中的每个字符串。
  • 将每个字符串与正则表达式匹配,以便出现't'。
  • 搜索从每个字符串派生的字符数组的第1位开始。所以它 在字符串的开头自动留下任何't'。

Ideone示例。

希望它对你有所帮助。