Regex .NET匹配所有内容,直到找到第一个空格+字母

时间:2015-10-19 12:39:17

标签: .net regex

我有:

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

请帮助我使用正确的正则表达式来实现目标。

3 个答案:

答案 0 :(得分:2)

而不是尝试替换,匹配你想要的:

(?<= )[A-Za-z].*

demo

答案 1 :(得分:1)

搜索:

^.*?- (?=[A-Za-z])

并用空字符串替换。

RegEx Demo

答案 2 :(得分:1)

如果您正在寻找仅匹配上一个-之后的子字符串的正则表达式解决方案,您可以使用

-\s*([^-]*$)

请参阅demo

如果必须是连字符后的字母,则可以使用-\s*(\p{L}[^-]*$)\p{L}构造将匹配任何Unicode字母。

enter image description here

C# IDEONE demo

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