亲爱的同志们问候。
我无法弄清楚如何通过正则表达式完成以下操作。
我需要使用此格式编号201101234
并将其转换为11-0123401
,其中数字3和4成为短划线左侧的数字,其余五位数字插入右侧短划线,然后是硬编码的01。
我尝试过http://gskinner.com/RegExr,但语法却让我失望。
这个答案Equivalent of Substring as a RegularExpression听起来很有希望,但我无法正确解析它。
我可以创建一个SQL函数来完成此任务,但我不想锤击我的服务器以重新格式化一些字符串。
提前致谢。
答案 0 :(得分:11)
你可以试试这个:
var input = "201101234";
var output = Regex.Replace(input, @"^\d{2}(\d{2})(\d{5})$", "${1}-${2}01");
Console.WriteLine(output); // 11-0123401
这将匹配:
并返回一个字符串,用
替换匹配的文本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吗?拉一些杠杆和东西。