首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Match Multiline & IgnoreSome

Match Multiline & IgnoreSome
EN

Stack Overflow用户
提问于 2013-07-24 02:40:50
回答 1查看 100关注 0票数 1

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

代码语言:javascript
复制
//JOBNAME0 JOB (BLABLABLA),'SOME TEXT',MSGCLASS=YES,ILIKE=POTATOES, GRMBL
//             IALSOLIKE=TOMATOES,      ANOTHER GARBAGE
//             FINALLY=BYE
//OTHER STUFF

因此,我需要提取职务名称JOBNAME0、信息(BLABLABLA)、描述'SOME TEXT'和其他parms MSGCLASS=YES ILIKE=POTATOES IALSOLIKE=TOMATOES FINALLY=BYE

我必须忽略空间之后的一切..。比如GRMBLANOTHER GARBAGE

如果我的最后一个有效字符是,,我必须继续到下一行,如果没有,则停止。

到目前为止,我已经成功地获得了工作名称,信息和描述,相当容易。对于其他的部分,我能够得到所有的部分并将它们分开,但是我不知道如何处理这些垃圾。

这是我的代码:

代码语言:javascript
复制
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 + "|");

我得到的输出是这个:

代码语言:javascript
复制
//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 |

我希望看到的产出是:

代码语言:javascript
复制
//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|

有办法得到我想要的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-24 06:38:36

我想我会尝试用两个Regex表达式来实现这一点。

第一个从字符串开始获取所有的起始信息--作业名称、信息、描述。

第二个获得所有参数的方法,这些参数似乎都有一个简单的<param name>=<param value>模式。

第一个Regex可能如下所示:

代码语言:javascript
复制
^//(?<job>[\d\w]+)[ ]+JOB[ ]+\((?<info>[\d\w]+)\),'(?<description>[\d\w ]+)'

我不知道规则是否允许空格出现在职务名称、信息或描述中--根据需要进行调整。另外,我假设这是使用^ char的文件的开始。最后,这个Regex有已经定义的组,因此在C#中获取值应该更容易。

第二个Regex可能是这样的:

代码语言:javascript
复制
(?<param>[\w\d]+)=(?<value>[\w\d]+)

此外,还添加了分组以帮助获取参数名称和值。

希望这能有所帮助。

编辑:

一个小提示--您可以在@字符串之前使用C#符号,以便更容易地编写这样的Regex模式。例如:

代码语言:javascript
复制
Regex reg = new Regex(@"(?<param>[\w\d]+)=(?<value>[\w\d]+)");
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17824317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档