C# 如何捕获组

C# 如何捕获组,c#,regex,C#,Regex,在C#和NET正则表达式引擎中,我有一个这样的输入行,它以\n 1ROSS/SVETA/JAMIE MRS T02XT 2WHITE/VIKA MS 3GREEN/ANDYMR 我必须获得 第一次捕获 1. num=1 2. surname=ROSS 3. name=SVETA 4. name=JAMIE 5. title=MRS 6. other=T02XT 第二次捕获 1. num=2 2. surname=WHITE 3. name=VIKA 4. title=MS

在C#和NET正则表达式引擎中,我有一个这样的输入行,它以
\n

1ROSS/SVETA/JAMIE MRS T02XT 2WHITE/VIKA MS 3GREEN/ANDYMR
我必须获得

第一次捕获

 1. num=1
 2. surname=ROSS
 3. name=SVETA
 4. name=JAMIE 
 5. title=MRS 
 6. other=T02XT
第二次捕获

1. num=2
2. surname=WHITE
3. name=VIKA 
4. title=MS
第三次捕获

1. num=3
2. surname=GREEN
3. name=ANDY
4. title=MR
第一组有两个名字,第三组的ANDY和MR没有空格。我无法解决这个问题。我开始使用

(^\d|\s\d)

检测组并工作,但在我不知道如何捕获到每个组的末尾并将内部数据分成子组后。

如果标题值设置为
MR
MRS
MS
,则可以使用

\b(?<num>\d)(?<surname>\p{L}+)(?:/(?<name>\p{L}+?))+(?:\s*(?<title>M(?:RS?|S)))?\b\s*(?<other>.*?)(?=\b\d\p{L}+/\p{L}|$)
输出:

Num: 1
Surname: ROSS
Names: SVETA, JAMIE
Title: MRS
Other: T02XT 
===== NEXT MATCH ======
Num: 2
Surname: WHITE
Names: VIKA
Title: MS
Other: 
===== NEXT MATCH ======
Num: 3
Surname: GREEN
Names: ANDY
Title: MR
Other: 
===== NEXT MATCH ======

@然后,新手将
(?M(?:RS?| S))替换为
(?M(?:RS?| S))
。我建议<代码>(先生先生,小姐小姐)< />代码,但是它是在模式中间的一个可选的子模式,这将是太低效的,所以,我宁愿“增强”这一部分。很高兴它对你有用。也请考虑在达到15个代表点后进行投票(见)。
Num: 1
Surname: ROSS
Names: SVETA, JAMIE
Title: MRS
Other: T02XT 
===== NEXT MATCH ======
Num: 2
Surname: WHITE
Names: VIKA
Title: MS
Other: 
===== NEXT MATCH ======
Num: 3
Surname: GREEN
Names: ANDY
Title: MR
Other: 
===== NEXT MATCH ======