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

时间:2016-06-13 14:27:43

标签: c# regex regex-greedy

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

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

我想要匹配的示例字符串是

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

我想要以下输出:

输入:IDCH

中间:测试测试

秒:15秒

身体:发现.....

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

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

中间:测试

秒:

body:tes 15s ........

由于

1 个答案:

答案 0 :(得分:2)

要解析你非常具体的输入字符串,这对我来说很有意义:

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

当您使用\D

时,中间部分会捕获除数字之外的所有内容
(?<middle>(\s\D+)*)?

让秒数有机会将数字与\ d +

匹配
(?<seconds>\d+s)?

修改

提取您应该查找以空格开头并且后面跟着s

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