查找并插入

时间:2009-08-27 15:45:11

标签: c# regex

我有一个看起来像的字符串(*是文字的):

clp*(seven digits)1*

我想改变它,看起来像:

clp*(seven digits)(space)(space)1*

我正在使用C#并构建我的搜索模式:

Regex regAddSpaces = new Regex(@"CLP\*.......1\*");

我不确定如何告诉正则表达式保留前11个字符,添加两个空格然后用1*加上

感谢任何帮助。

4 个答案:

答案 0 :(得分:6)

这里不需要使用正则表达式。简单的字符串操作将完美地完成工作。

var input = "clp*01234561*";
var output = input.Substring(0, 11) + "  " + input.Substring(11, 2);

答案 1 :(得分:3)

我同意Noldorin。但是,如果您真的想要,可以使用正则表达式来执行此操作:

var result = Regex.Replace("clp*12345671*", @"(clp\*\d{7})(1\*)", @"$1  $2");

答案 2 :(得分:1)

如果您只想在文本中的任何位置替换它,您可以使用排除的前缀和后缀运算符...

pattern =“(?< = clp * [0-9] {7})(?= 1 *)”

将此值移至正则表达式替换为替换值“”将插入空格。

因此,下面的单线程就可以解决问题:

string result = Regex.Replace(inputString, @"(?<=clp\*[0-9]{7})(?=1\*)", " ", RegexOptions.IgnoreCase);

答案 3 :(得分:0)

这是正则表达式,但如果你的解决方案如上所述那么简单,那么Noldorin的答案将是一个更清晰,更易于维护的解决方案。但既然你想要正则表达式......在这里你去:

// Not a fan of the 'out' usage but I am not sure if you care about the result success
public static bool AddSpacesToMyRegexMatch(string input, out string output)
{
    Regex reg = new Regex(@"(^clp\*[0-9]{7})(1\*$)");
    Match match = reg.Match(input);
    output = match.Success ?
        string.Format("{0}  {1}", match.Groups[0], match.Groups[1]) :
        input;
    return match.Success;
}