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

本文关键字:单词 第一个 附加 替换 正则表达式 | 更新日期: 2023-09-27 18:32:55

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

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

我该怎么做?请帮忙

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

但是如何附加第一个"b"?

结果应该是"gab g"。

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

我猜你想要这样的东西,尽管我不使用 c#,所以语法可能是错误的。 (另外,你的描述令人困惑,所以我可能没有理解你想要什么)

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

哪里:

  • "(...)"是一个匹配组,$n复制第 n 个匹配组的内容
  • "
  • [^ ]"表示"除空格以外的任何字符
  • "[^ ]+" 表示"一个或多个非空格字符"
  • "''?" 表示"字面问号",因为问号在正则表达式中很特殊

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

/ '?a./

由于我不懂任何 C#,这里有一个 jsfiddle(我保持简单,以防你不知道任何 js)

这必须是正则表达式有什么特别的原因吗?

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 委托,但这仍然需要自定义代码。 我不认为你可以通过一个简单的Regex.Replace来做你所要求的。