替换文本文件中特定点的数字

时间:2012-02-01 18:03:18

标签: c# regex

我有一个包含以下内容的文本文件(内容可变为> 10 MB)我想将副本数量设置/替换为动态数字和。我使用sed utiliy做同样的事情,但它会显示comand提示。有没有办法使用C#/正则表达式?

如何将更改的模式写回文件?

%-12345X@PJL JOB NAME = "Microsoft Word -Values.docx"
@PJL OKIAUXJOBINFO DATA="ComputerName=USER-PC"
@PJL OKIAUXJOBINFO DATA="UserName=user"
@PJL OKIAUXJOBINFO DATA="PortName=PORTCUSTOM"
@PJL OKIAUXJOBINFO DATA="ReceptionTime=22:04:09 2012/02/01"
@PJL OKIAUXJOBINFO DATA="DocumentName=Microsoft Word - LDAPValues.docx"
@PJL OKIAUXJOBINFO DATA="MultiPage=1"
@PJL OKIAUXJOBINFO DATA="ApplicationName=Microsoft Office Word"
@PJL OKIJOBACCOUNTJOB JOBACCOUNTID=0 USERID="user" JOBNAME="Microsoft Word - Values.docx"
@PJL RDYMSG DISPLAY = ""
@PJL COMMENT OS Version   : Windows NT 6.1 Build 7600 
@PJL COMMENT Product Name : OKI PCL5c Printer Driver
@PJL COMMENT Device Name  : OKI
@PJL COMMENT Version      : 1.0.5
@PJL COMMENT Build Date   : 2010/03/30 (Tue) 16:17:01
@PJL SET OKIPAPERSIZECHECK=ENABLE
@PJL SET OKICUPAPERSIZECHECK=ENABLE
@PJL SET MANUALFEED=OFF
@PJL SET OKIXDIMENSIONMILLIMETER=216
@PJL SET OKIYDIMENSIONMILLIMETER=280
@PJL SET MEDIASRCMANUAL=2
@PJL SET MEDIASRCINTRAY1=4
@PJL SET MEDIASRCINTRAY2=1
@PJL SET MEDIASRCINTRAY3=5
@PJL SET MEDIASRCINTRAY4=6
@PJL SET MEDIASRCINTRAY5=20
@PJL SET MEDIASRCINTRAY6=21
@PJL SET MEDIASRCINTRAY7=22
@PJL SET QTY=1
@PJL SET COPIES=2
@PJL SET OKIRESOLUTION=X600Y600LEVEL2

2 个答案:

答案 0 :(得分:3)

这会找到“@PJL SET COPIES=

之后的数字
(?<=@PJL\ SET\ COPIES=)\d+

像这样使用

Regex.Replace(text, @"(?<=@PJL\ SET\ COPIES=)\d+", newCount.ToString());   

我使用了Regex环视模式

(?<=prefix)find

答案 1 :(得分:1)

似乎

Regex.Replace(
    input, 
    @"COPIES=\d+", 
    string.Format("COPIES={0}", number), 
    RegexOptions.Multiline);

会做到这一点。

http://msdn.microsoft.com/en-us/library/taz3ak2f.aspx

将其写回文件将如下所示:

string input = File.ReadAllText("filename.txt");
string output = Regex.Replace(
    input, 
    @"COPIES=\d+", 
    string.Format("COPIES={0}", number), 
    RegexOptions.Multiline);
File.WriteAllText("filename.txt", output);