C# 匹配多行&;无知的
我试图使用C中的正则表达式从JCL源代码中提取一些信息# 基本上,这是我可以拥有的字符串:C# 匹配多行&;无知的,c#,regex,C#,Regex,我试图使用C中的正则表达式从JCL源代码中提取一些信息# 基本上,这是我可以拥有的字符串: //JOBNAME0 JOB (BLABLABLA),'SOME TEXT',MSGCLASS=YES,ILIKE=POTATOES, GRMBL // IALSOLIKE=TOMATOES, ANOTHER GARBAGE // FINALLY=BYE //OTHER STUFF 因此,我需要提取jobnameJOBNAME0、info(BLA
//JOBNAME0 JOB (BLABLABLA),'SOME TEXT',MSGCLASS=YES,ILIKE=POTATOES, GRMBL
// IALSOLIKE=TOMATOES, ANOTHER GARBAGE
// FINALLY=BYE
//OTHER STUFF
因此,我需要提取jobnameJOBNAME0
、info(BLABLABLA)
、description“一些文本”
,以及其他参数MSGCLASS=YES
ILIKE=potates
IALSOLIKE=poatos
最终=BYE
我必须忽略空间后面的一切。。。像GRMBL
或另一个垃圾
如果我的最后一个有效字符是,
,我必须继续到下一行,如果没有,则停止
到目前为止,我已经成功地获得了工作名称、信息和描述,非常简单。对于其他PARM,我可以得到所有PARM并将其拆分,但我不知道如何清除垃圾
这是我的密码:
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|
JOBNAME0|
(BLABLABLA)|
'SOME TEXT'|
MSGCLASS=YES|ILIKE=POTATOES|IALSOLIKE=TOMATOES|FINALLY=BYE|
有办法得到我想要的吗?我想我应该尝试用两个
Regex
表达式来实现这一点
第一个从字符串开头获取所有起始信息的字符串-作业名称、信息、描述
第二个是获取所有参数,这些参数似乎都有一个简单的模式=
第一个Regex
可能如下所示:
^//(?<job>[\d\w]+)[ ]+JOB[ ]+\((?<info>[\d\w]+)\),'(?<description>[\d\w ]+)'
(?<param>[\w\d]+)=(?<value>[\w\d]+)
再次添加分组以帮助获取参数名称和值
希望这有帮助
编辑:
一个小提示-您可以在C#中的字符串前面使用@
符号,以便更轻松地编写此类正则表达式
模式。例如:
Regex reg = new Regex(@"(?<param>[\w\d]+)=(?<value>[\w\d]+)");
Regex reg=newregex(@“(?[\w\d]+)=(?[\w\d]+)”;
我想我应该尝试用两个Regex
表达式来实现这一点
第一个从字符串开头获取所有起始信息的字符串-作业名称、信息、描述
第二个是获取所有参数,这些参数似乎都有一个简单的模式=
第一个Regex
可能如下所示:
^//(?<job>[\d\w]+)[ ]+JOB[ ]+\((?<info>[\d\w]+)\),'(?<description>[\d\w ]+)'
(?<param>[\w\d]+)=(?<value>[\w\d]+)
再次添加分组以帮助获取参数名称和值
希望这有帮助
编辑:
一个小提示-您可以在C#中的字符串前面使用@
符号,以便更轻松地编写此类正则表达式
模式。例如:
Regex reg = new Regex(@"(?<param>[\w\d]+)=(?<value>[\w\d]+)");
Regex reg=newregex(@“(?[\w\d]+)=(?[\w\d]+)”;
您是否考虑过使用两个正则表达式执行此操作?是否考虑过使用两个正则表达式执行此操作?