C# 如何捕获组
在C#和NET正则表达式引擎中,我有一个这样的输入行,它以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
\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 ======