正则表达式子串或左等效

Eri*_*ein 4 c# regex

亲爱的同志们问候.

我无法弄清楚如何通过正则表达式完成以下操作.

我需要取这个格式编号201101234并将其转换为11-0123401,其中数字3和4成为短划线左侧的数字,其余五位数字插入短划线右侧,然后是硬编码01.

我试过http://gskinner.com/RegExr,但语法只是让我失望.

这个答案,相当于子串作为RegularExpression,听起来很有希望,但我无法正确解析它.

我可以创建一个SQL函数来实现这一点,但我不想锤击我的服务器以重新格式化一些字符串.

提前致谢.

p.s*_*w.g 11

你可以试试这个:

var input = "201101234";
var output = Regex.Replace(input, @"^\d{2}(\d{2})(\d{5})$", "${1}-${2}01");

Console.WriteLine(output); // 11-0123401
Run Code Online (Sandbox Code Playgroud)

这将匹配:

  • 两位数,然后是
  • 两个数字作为组1捕获,然后是
  • 五个数字作为第2组捕获

并返回一个字符串,用以替换匹配的文本

  • 第1组,然后是
  • 一个字面连字符,然后是
  • 第2组,然后是
  • 文字01.

开始和结束锚点(^/ $)确保如果输入字符串与此模式不完全匹配,它将只返回原始字符串.


D.R*_*.R. 8

如果您可以使用自定义C#脚本,则可能需要使用Substring:

string newStr = string.Format("{0}-{1}01", old.Substring(2,2), old.Substring(4));
Run Code Online (Sandbox Code Playgroud)


Roh*_*ain 6

我不认为你真的需要一个正则表达式.子串会更好.但是如果你只想要正则表达式,你可以使用这个:

string newString = Regex.Replace(input, @"^\d{2}(\d{2})(\d+)$", "$1-${2}01");
Run Code Online (Sandbox Code Playgroud)

说明:

^\d{2}    // Match first 2 digits. Will be ignored
 (\d{2})  // Match next 2 digits. Capture it in group 1
 (\d+)$   // Match rest of the digits. Capture it in group 2
Run Code Online (Sandbox Code Playgroud)

现在,所需的数字位于第1组和第2组中,您可以在替换字符串中使用它们.

  • 这实际上会输出"11- $ 201" (3认同)