你可以使用类似于那些建议的正则表达式:
(?:^value_name\s+)?([^,]+)(?:\s*,\s*)?
第一组是非捕获的,并且匹配线的起点和value_name
.
为了确保正则表达式对所有匹配仍然有效,我们通过使用'?'
修改后的意思使该组可选(意味着最多匹配一次).
第二组是捕获并匹配您的vXX
数据.
第三组是非捕获的,并且会匹配,
它之前和之后的任何空格.
同样,我们通过使用'?'
修饰符使其成为可选项,否则最后一'vXX'
组将不匹配,除非我们以final结束字符串','
.
在你的试验中,正则表达式不会多次匹配:你必须记住,如果你想要一个正则表达式匹配字符串中的多个匹配项,整个正则表达式需要匹配字符串中的每一个匹配项,所以你必须建立你的正则表达式不仅要匹配字符串的开头'value_name'
,还要匹配其中的每一个匹配项'vXX'
.
在C#中,您可以使用以下代码列出所有匹配项和组:
Regex r = new Regex(@"(?:^value_name\s+)?([^,]+)(?:\s*,\s*)?"); Match m = r.Match(subjectString); while (m.Success) { for (int i = 1; i < m.Groups.Count; i++) { Group g = m.Groups[i]; if (g.Success) { // matched text: g.Value // match start: g.Index // match length: g.Length } } m = m.NextMatch(); }