我有:
01 - Radio N Am 2007
186508980X -16-17 - Horns and Bones
(ab)normal - constitutions
目标:
Radio N Am 2007
Horns and Bones
constitutions
我试过
^(?:(?!(?:\S*[\s[a-z][A-Z])).)+
但输出是:
- Radio N Am 2007
- Horns and Bones
请帮助我使用正确的正则表达式来实现目标。
答案 0 :(得分:2)
答案 1 :(得分:1)
答案 2 :(得分:1)
如果您正在寻找仅匹配上一个-
之后的子字符串的正则表达式解决方案,您可以使用
-\s*([^-]*$)
请参阅demo
如果必须是连字符后的字母,则可以使用-\s*(\p{L}[^-]*$)
。 \p{L}
构造将匹配任何Unicode字母。
var lines = new string[] {"01 - Radio N Am 2007",
"186508980X -16-17 - Horns and Bones",
"(ab)normal - constitutions"};
foreach (string s in lines)
{
var matches = Regex.Matches(s, @"-\s*([^-]*$)");
foreach (Match m in matches)
Console.WriteLine(m.Groups[1].Value);
}
但如果你需要在最后一个连字符后得到子串,你也可以使用非正则表达式方法:
Console.WriteLine(s.Substring(s.LastIndexOf("-") + 1).Trim());
请参阅another demo