正则表达式提取2个不同字符和字符串之间的字符串

问题描述:

简短的问题,但不能使其工作。我有一个字符串:正则表达式提取2个不同字符和字符串之间的字符串

COMPANY NAME - username (Name Surname). 

什么样的正则表达式的会给我username(无空格)从-(之间的这样的例子?

这是ASP.NET C#,如果它有任何区别。提前致谢 !

编辑: 公司名称是一个可能的空格字符串。用户名不含空格。字符-(只出现在这2个地方。自从我举出这样的例子以来,我认为这是100%明显的。

+2

'username'是否可以包含空格或括号? –

+2

公司名称是否可以包含连字符或括号? –

+2

是否保证该线路将以完全停止状态结束? –

var match = Regex.Match(
    "COMPANY - ltd (NAME) - username (Name Surname)", 
    @"^.* - (.*?) \(.*\)$" 
); 
var username = match.Groups[1].Value; 

如果您的线路有.,则正则表达式的结束是@"^.* - (.*?) \(.*\)\.$"

通过使用.*?(懒惰的量化r)这个正则表达式对于我用来作为测试的那个奇怪的“东西”很有抵抗力。

Link有测试。传递每一行以查看捕获组。

string resultString = null; 
try { 
    resultString = Regex.Match(subjectString, @"-\s+(\S*)\s*\(").Groups[1].Value; 
} catch (ArgumentException ex) { 
    // Syntax error in the regular expression 
} 

输出:username

+1

您可以删除'RegexOptions'。当然,这只适用于'username'不包含空格的情况。这是一个合理的假设,因此+1。 –

+0

@TimPietzcker选项被遗忘在以前的正则表达式中:S。 +1指出它! – FailedDev

+0

这很好,谢谢。通常用户名不包含空格,我没有提及有问题的空间,所以假设很好:) – yosh

很容易使用grep来测试正则表达式:

kent$ echo "COMPANY NAME - username (Name Surname)."|grep -Po '(?<=-).*(?= \()' 
username 

你可以看下面的youtube正则表达式视频,我相信上面的问题你可以自己回答。

http://youtu.be/C2zm0roE-Uc