如何使用 C# 正则表达式模式提取所需的组

How to extract required groups using C# Regular Expression pattern

我正在学习正则表达式。我正在尝试使用以下正则表达式

^(?<type>\W?\w+)(?<middle>\s\w+)?\s(((?<seconds>\d+)[s-]?)?)\s?(?<body>.+?)$

我要匹配的示例字符串是

IDCH 测试测试 15s 发现 Spring 喜欢你发现 Quelle 的机会! Fevr16

我想要以下输出:

类型:IDCH

中:测试

秒:15s

正文:发现.....

我使用上面的模式没有得到预期的输出。任何人都可以帮助我的正则表达式模式有什么问题吗?

这是我目前得到的: 类型:IDCH

中间:测试

秒:

正文:测试 15s .......

谢谢

为了解析您非常具体的输入字符串,这为我完成了工作:

^(?<type>\W?\w+)(?<middle>(\s\D+)*)?\s(?<seconds>\d+s)?\s?(?<body>.+?)$

当您使用 \D

时,中间部分会捕获除数字以外的任何垃圾
(?<middle>(\s\D+)*)?

这让秒有机会匹配数字与 \d+

(?<seconds>\d+s)?

编辑:

要提取秒数,您应该寻找一个以 space 开头并紧跟 s

的数字
^(?<type>\W*\w*)(?<middle>(\s\w+)*)(?<seconds>\s\d+s)\s(?<body>.+?)$