C#正则表达式用另一个分隔符替换分隔符

时间:2009-03-17 08:01:16

标签: c# regex parsing plsql delimited-text

我正在研究pl / sql代码,我想替换';'用'〜'评论。

e.g。

如果我的代码为:

--comment 1 with;
select id from t_id;
--comment 2 with ;
select name from t_id;
/*comment 3 
with ;*/

然后我希望我的结果文本为:

--comment 1 with~
select id from t_id;
--comment 2 with ~
select name from t_id;
/*comment 3 
with ~*/

可以在C#中使用正则表达式完成吗?

2 个答案:

答案 0 :(得分:4)

正则表达式:

((?:--|/\*)[^~]*)~(\*/)?

使用它的C#代码:

string code = "all that text of yours";
Regex regex = new Regex(@"((?:--|/\*)[^~]*)~(\*/)?", RegexOptions.Multiline);
result = regex.Replace(code, "$1;$2");

未使用C#进行测试,但正则表达式和替换在RegexBuddy中使用您的文本=)

注意:我不是一个非常出色的正则表达式作家,所以它可能写得更好。但它的确有效。并使用以 - 开头的单行注释处理您的案例 - 以及使用/ * * /

的多行注释

编辑:将您的评论读到另一个答案,因此删除了^锚点,以便它也可以处理不在新行上开始的评论。

编辑2:想象它可以简化一下。还发现它没有结束$锚也能正常工作。

<强>解释

// ((?:--|/\*)[^~]*)~(\*/)?
// 
// Options: ^ and $ match at line breaks
// 
// Match the regular expression below and capture its match into backreference number 1 «((?:--|/\*)[^~]*)»
//    Match the regular expression below «(?:--|/\*)»
//       Match either the regular expression below (attempting the next alternative only if this one fails) «--»
//          Match the characters “--” literally «--»
//       Or match regular expression number 2 below (the entire group fails if this one fails to match) «/\*»
//          Match the character “/” literally «/»
//          Match the character “*” literally «\*»
//    Match any character that is NOT a “~” «[^~]*»
//       Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*»
// Match the character “~” literally «~»
// Match the regular expression below and capture its match into backreference number 2 «(\*/)?»
//    Between zero and one times, as many times as possible, giving back as needed (greedy) «?»
//    Match the character “*” literally «\*»
//    Match the character “/” literally «/»

答案 1 :(得分:1)

不需要正则表达式 - 您可以迭代行,找到以“ - ”开头的行并替换“;”对他们说“〜”。

String.StartsWith("--") - 确定String实例的开头是否与指定的字符串匹配。

String.Replace(";", "~") - 返回一个新字符串,其中此实例中出现的所有指定Unicode字符或字符串都替换为另一个指定的Unicode字符或字符串。