我想从C# 基本上使用正则表达式一个JCL源提取一些信息,这是一个字符串,我可以有:匹配多行&IgnoreSome
//JOBNAME0 JOB (BLABLABLA),'SOME TEXT',MSGCLASS=YES,ILIKE=POTATOES, GRMBL
// IALSOLIKE=TOMATOES, ANOTHER GARBAGE
// FINALLY=BYE
//OTHER STUFF
所以我需要提取作业名JOBNAME0
,信息(BLABLABLA)
,描述'SOME TEXT'
和其他参数MSGCLASS=YES
ILIKE=POTATOES
IALSOLIKE=TOMATOES
FINALLY=BYE
。
我必须忽略一切有空间后...像GRMBL
或ANOTHER GARBAGE
我必须继续下一行,如果我的最后一个有效字符是一个,
停止,如果什么都没有。
到目前为止,我已经成功地设法获得了工作名称,信息和描述,非常简单。对于其他帕姆斯,我能够得到所有的帕尔姆并将它们分开,但我不知道如何摆脱垃圾。
这里是我的代码:
var regex = "//([^\\s]*) JOB (\\([^)]*\\))?,?(\\'[^']*\\')?,?([^,]*[,|\\s|$])*";
Match match2 = Regex.Match(test5, regex,RegexOptions.Singleline);
string CarteJob2 = match2.Groups[0].Value;
string JobName2 = match2.Groups[1].Value;
string JobInfo2 = match2.Groups[2].Value;
string JobDesc2 = match2.Groups[3].Value;
IEnumerable<string> parms = match2.Groups[4].Captures.OfType<Capture>().Select(x => x.Value);
string JobParms2 = String.Join("|", parms);
Console.WriteLine(CarteJob2 + "|");
Console.WriteLine(JobName2 + "|");
Console.WriteLine(JobInfo2 + "|");
Console.WriteLine(JobDesc2 + "|");
Console.WriteLine(JobParms2 + "|");
输出我得到的是这样一个:
//JOBNAME0 JOB (BLABLABLA),'SOME TEXT',MSGCLASS=YES,ILIKE=POTATOES, GRMBL
// IALSOLIKE=TOMATOES, ANOTHER GARBAGE
// FINALLY=BYE
//OTHER |
JOBNAME0|
(BLABLABLA)|
'SOME TEXT'|
MSGCLASS=YES,|ILIKE=POTATOES,| GRMBL
// IALSOLIKE=TOMATOES,| ANOTHER GARBAGE
// FINALLY=BYE
//OTHER |
我想看到的输出是:
//JOBNAME0 JOB (BLABLABLA),'SOME TEXT',MSGCLASS=YES,ILIKE=POTATOES, GRMBL
// IALSOLIKE=TOMATOES, ANOTHER GARBAGE
// FINALLY=BYE|
JOBNAME0|
(BLABLABLA)|
'SOME TEXT'|
MSGCLASS=YES|ILIKE=POTATOES|IALSOLIKE=TOMATOES|FINALLY=BYE|
是否有方式得到我想要的?
你有没有考虑过用两个正则表达式来做这件事? – unlimit