正则表达式“追加”或“替换”每个单词的第一个字母?

时间:2012-05-01 23:33:08

标签: c# regex

如果我有两个词,例如“ga?abg”

我想删除第二个单词中的前两个字符,如果它们匹配“?a”并取出后面的“b”并将其附加到第一个单词?

我该怎么做?请帮忙

string five ="ga ?abg";
string T = Regex.Replace(five, "?a", " ");

但如何追加第一个“b”?

结果应该是“gab g”。

3 个答案:

答案 0 :(得分:1)

我猜你想要这样的东西,虽然我不使用c#,所以语法可能是错误的。 (另外,你的描述很混乱,所以我可能没理解你想要的东西)

Regex.Replace(five, "([^ ]+) \\?a([^ ])", "$1$2")

其中:

  • “(...)”是匹配组,$ n复制第n个匹配组的内容
  • “[^]”表示“除空格外的任何字符
  • “[^] +”表示“一个或多个非空格字符”
  • “\?”意为“文字问号”,因为问号在regexp中是特殊的

答案 1 :(得分:0)

我认为您正在寻找的正则表达式是:

/ \?a./

因为我不知道任何C#,所以这是jsfiddle(我保持简单,因为你不知道任何js)

答案 2 :(得分:0)

这有什么特别的原因必须是Regex?

string answer;
string[] split = five.Split(' ');
if (split.Length == 2 && split[0].Length > 0 && split[1].StartsWith("?a") && split[1].Length > 3)
{
    answer = string.Format("{0}{1} {2}", split[0], split[1].Substring(2, 1), split[1].Substring(3));
}
else
{
    answer = five;
}

或者,您可以使用MatchEvaluator Delegate,但仍需要自定义代码。我认为你不能通过一个简单的Regex.Replace来做你想要的事。