Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 匹配多行&;无知的_C#_Regex - Fatal编程技术网

C# 匹配多行&;无知的

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

我试图使用C中的正则表达式从JCL源代码中提取一些信息# 基本上,这是我可以拥有的字符串:

//JOBNAME0 JOB (BLABLABLA),'SOME TEXT',MSGCLASS=YES,ILIKE=POTATOES, GRMBL
//             IALSOLIKE=TOMATOES,      ANOTHER GARBAGE
//             FINALLY=BYE
//OTHER STUFF
因此,我需要提取jobname
JOBNAME0
、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]+)”;

您是否考虑过使用两个正则表达式执行此操作?是否考虑过使用两个正则表达式执行此操作?