我有一个看起来像的字符串(*
是文字的):
clp*(seven digits)1*
我想改变它,看起来像:
clp*(seven digits)(space)(space)1*
我正在使用C#并构建我的搜索模式:
Regex regAddSpaces = new Regex(@"CLP\*.......1\*");
我不确定如何告诉正则表达式保留前11个字符,添加两个空格然后用1*
加上
感谢任何帮助。
答案 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;
}