如何将分组的正则表达式内容从一个文件用于另一个文件?

时间:2017-10-19 13:26:09

标签: c# regex

如何从一个文件中获取匹配的正则表达式组值并将其粘贴到另一个文件中 我尝试过这样的事情

<transportSender name="jms" class="org.apache.axis2.transport.jms.JMSSender"/>

但由于某种原因它不起作用,我无法弄清楚出了什么问题? 我基本上试图从一个文件中获取第一个var doc=File.ReadAllText(@"D:\Project\12345\database\xyz.txt"); Regex r=new Regex(@"<ttl>(\w+)</ttl>"); Match m=r.Match(doc); string gr=m.Groups[1].Value; File.WriteAllText(@"E:\Final\12345\2017\xyz.txt", File.ReadAllText(@"E:\Final\12345\2017\123.txt").Replace("<ce-title>[^<]+</ce-title>","<ce-title>"+gr+"</ce-title>")); Console.WriteLine("Done"); Console.ReadLine(); 元素内的内容,并使用正则表达式将该值粘贴到另一个文件<ttl>元素。 注意:我知道这可以使用xml / html解析技术完成,但我想知道如何使用正则表达式做这个简单的事情。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:3)

您使用的是String.Replace()而不是Regex.Replace

重写您的代码,如下所示:

var doc=File.ReadAllText(@"D:\Project\12345\database\xyz.txt");
var r = new Regex(@"<ttl>(\w+)</ttl>");
Match m=r.Match(doc);
if (m.Success)
{
     var gr = m.Groups[1].Value;
     var rx = new Regex("<ce-title>[^<]+</ce-title>");
     File.WriteAllText(@"E:\Final\12345\2017\xyz.txt", 
          rx.Replace(
               File.ReadAllText(@"E:\Final\12345\2017\123.txt‌​"),  // Input
               string.Format("<ce-title>{0}</ce-title>", gr),     // Replacement
               1                                                  // Number of occurrences
          )
     );
}
Console.WriteLine("Done");
Console.ReadLine();

由于gr仅由字词组成,因此使用string.Format("<ce-title>{0}</ce-title>", gr)作为替代是安全的。否则,如果需要支持任何字符,则需要使用string.Format("<ce-title>{0}</ce-title>", gr.Replace("$", "$$"))