我想在括号之间提取文本 - 也不是括号!
我的代码目前看起来像这样:
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"
你能帮我把它简化为一个正则表达式,而不是正则表达式,然后是子串吗?
答案 0 :(得分:5)
您使用不同的组号。每次在()中包装内容时,它都会创建一个新组。组零是整个找到的表达式。 group1是第一组(),group2是第二组,等等。因为你正在使用组0,它返回与表达式匹配的整个字符串
尝试将群组[x]更改为1并查看它为您提供的内容。
答案 1 :(得分:0)
您可以使用零宽度前瞻(?=
)和lookbehind(?<=
)断言:
m = Regex.Match(source, @"(?<=\[).*(?=\])");
var role = m.Value;
有关详细信息,请参阅MSDN上的Grouping Constructs。