正则表达式在两个分隔符之间提取字符串而不返回分隔符?

时间:2010-04-30 00:49:57

标签: c#

我想在括号之间提取文本 - 也不是括号!

我的代码目前看起来像这样:

var source = "Harley, J. Jesse  Dead Game (2009)  [Guard]"

// Extract role with regex

m = Regex.Match(source, @"\[(.*)\]");
var role = m.Groups[0].Value;
// role is now "[Guard]"

role = role.Substring(1, role.Length-2);
// role is now "Guard"

你能帮我把它简化为一个正则表达式,而不是正则表达式,然后是子串吗?

2 个答案:

答案 0 :(得分:5)

您使用不同的组号。每次在()中包装内容时,它都会创建一个新组。组零是整个找到的表达式。 group1是第一组(),group2是第二组,等等。因为你正在使用组0,它返回与表达式匹配的整个字符串

尝试将群组[x]更改为1并查看它为您提供的内容。

答案 1 :(得分:0)

您可以使用零宽度前瞻(?=)和lookbehind(?<=)断言:

m = Regex.Match(source, @"(?<=\[).*(?=\])");
var role = m.Value;
  • 零宽度正向前瞻断言:匹配后缀但将其从捕获中排除
  • 零宽度正向后视断言:匹配前缀但将其从捕获中排除

有关详细信息,请参阅MSDN上的Grouping Constructs