正则表达式子串或左等效

时间:2013-07-31 20:38:01

标签: c# regex

亲爱的同志们问候。

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

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

我尝试过http://gskinner.com/RegExr,但语法却让我失望。

这个答案Equivalent of Substring as a RegularExpression听起来很有希望,但我无法正确解析它。

我可以创建一个SQL函数来完成此任务,但我不想锤击我的服务器以重新格式化一些字符串。

提前致谢。

4 个答案:

答案 0 :(得分:11)

你可以试试这个:

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

Console.WriteLine(output); // 11-0123401

这将匹配:

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

并返回一个字符串,用

替换匹配的文本
  • 第1组,然后是
  • 字面连字符,后跟
  • 第2组,然后是
  • 文字01

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

答案 1 :(得分:8)

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

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

答案 2 :(得分:6)

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

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

说明:

^\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

现在,所需的数字位于第1组和第2组中,您将在替换字符串中使用。

答案 3 :(得分:0)

你甚至是SQL吗?拉一些杠杆和东西。