-3

我想替换任何没有出现的子字符串 left 。喜欢,

  1. 输入:“计算机部分”

    查找子串="t" 替换子串="成功"

    输出CompusuccesserParsuccess

  2. 输入:“黄玉”

    查找子串="t" 替换子串="成功"

    输出topaz //t 出现在字符串“topaz”的第一位(左),因此不应替换它。

  3. 输入:“问题”

    查找子串="t" 替换子串="成功"

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

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

4

4 回答 4

1

您正在寻找的不是左侧的单词边界:

\Bt

在 regexr 上查看。

\B是一个零宽度断言,当位置的左侧和右侧是单词字符(或非单词字符)时匹配。所以这里你在 的右边有一个“t” \B,所以只有在“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") );
}

它产生与正则表达式完全相同的输出:

CompusuccesserParsuccess
黄玉
问题successions

于 2013-09-19T13:39:00.487 回答
0

怎么样:

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

我能得到你的功课吗:-)

于 2013-09-19T13:27:06.607 回答
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);
于 2013-09-19T14:05:49.147 回答
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样品。

希望它可以帮助你。

于 2013-09-19T14:48:00.250 回答