正则表达式 – 记事本RegeEx组捕获语法
发布时间:2020-12-14 05:55:33 所属栏目:百科 来源:网络整理
导读:我在文本文件中有一个标签名称列表,我想在记事本中使用“查找和替换”进行操作,它们列出如下: MyLabel_01MyLabel_02MyLabel_03MyLabel_04MyLabel_05MyLabel_06 我想在记事本中将它们重命名为以下内??容: Label_A_OneLabel_A_TwoLabel_A_ThreeLabel_B_OneLa
我在文本文件中有一个标签名称列表,我想在记事本中使用“查找和替换”进行操作,它们列出如下:
MyLabel_01 MyLabel_02 MyLabel_03 MyLabel_04 MyLabel_05 MyLabel_06 我想在记事本中将它们重命名为以下内??容: Label_A_One Label_A_Two Label_A_Three Label_B_One Label_B_Two Label_B_Three 我在记事本的替换对话框中使用的正则表达式捕获标签名称如下: ((MyLabel_0)((1)|(2)|(3)|(4)|(5)|(6))) 我想按如下方式替换每个捕获组: 1 = Label_ 2 = A_One 3 = A_Two 4 = A_Three 5 = B_One 6 = B_Two 7 = B_Three 我的问题是记事本没有注册上面的正则表达式的语法.当我在替换对话框中点击计数时,它返回0次.不确定语法中有什么问题.是的,我确保选择了正则表达式单选按钮.感谢帮助. 更新: 试图逃避括号,仍然没有工作: ((MyLabel_0)((1)|(2)|(3)|(4)|(5)|(6))) 解决方法
Ed的响应显示了一种工作模式,因为记事本不支持交替,但是单独使用regex无法处理其余问题.使用正则表达式查找/替换方法无法实现您的目标.您期望的结果涉及无法在正则表达式中表达的逻辑条件.您可以使用替换方法重新排列项目并参考捕获的项目,但您不能告诉它使用“A”表示值1-3,“B”表示4-6.此外,您不能分配这样的占位符.它们实际上是您反向引用的捕获组.
为了达到您已经显示的结果,您需要编写一个小程序,以便检查捕获的值并执行适当的替换. 编辑:这是一个如何在C#中实现这一目标的示例 var numToWordMap = new Dictionary<int,string>(); numToWordMap[1] = "A_One"; numToWordMap[2] = "A_Two"; numToWordMap[3] = "A_Three"; numToWordMap[4] = "B_One"; numToWordMap[5] = "B_Two"; numToWordMap[6] = "B_Three"; string pattern = @"bMyLabel_(d+)b"; string filePath = @"C:temp.txt"; string[] contents = File.ReadAllLines(filePath); for (int i = 0; i < contents.Length; i++) { contents[i] = Regex.Replace(contents[i],pattern,m => { int num = int.Parse(m.Groups[1].Value); if (numToWordMap.ContainsKey(num)) { return "Label_" + numToWordMap[num]; } // key not found,use original value return m.Value; }); } File.WriteAllLines(filePath,contents); 您应该可以轻松使用它.也许你可以下载LINQPad或Visual C# Express这样做. 如果您的文件太大,这可能是一种低效的方法,在这种情况下,您可以使用StreamReader和StreamWriter分别从原始文件中读取并将其写入另一个文件. 另请注意,我的示例代码会写回原始文件.出于测试目的,您可以将该路径更改为另一个文件,以免被覆盖. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |