这是我的第一条堆栈信息。希望你能帮忙。
我有几个字符串需要以后使用时拆分。以下是我所说的示例...
fred-064528-NEEDED
frederic-84728957-NEEDED
sam-028-NEEDED
如上所示,字符串长度差异很大,因此我认为正则表达式是实现我想要的唯一方法。我需要的是第二个连字符(“-”)后面的字符串的其余部分。
我对正则表达式非常薄弱,所以任何帮助都将是极好的。
提前致谢。
这是我的第一条堆栈信息。希望你能帮忙。
我有几个字符串需要以后使用时拆分。以下是我所说的示例...
fred-064528-NEEDED
frederic-84728957-NEEDED
sam-028-NEEDED
如上所示,字符串长度差异很大,因此我认为正则表达式是实现我想要的唯一方法。我需要的是第二个连字符(“-”)后面的字符串的其余部分。
我对正则表达式非常薄弱,所以任何帮助都将是极好的。
提前致谢。
为了提供一种不使用正则表达式的替代方案:
foreach(string s in list)
{
int x = s.LastIndexOf('-')
string sub = s.SubString(x + 1)
}
s.SubString(x + 1)
,否则它会包含最后一个“-”。 - Kobi如果它们是更大的文本的一部分:
(\w+-){2}(\w+)
如果整行都是表现形式,并且你知道没有其他连字符,你也可以使用以下方式:
[^-]*$
如果您每行都是字符串,另一种选择是使用split
(取决于您是否期望有额外的连字符,您可以省略count
参数或使用LastIndexOf
):
string[] tokens = line.Split("-".ToCharArray(), 3);
string s = tokens.Last();
var exp = @"^\w*-\w*-(.*)$";
var match = Regex.Match("frederic-84728957-NEE-DED", exp);
if (match.Success)
{
var result = match.Groups[1]; //Result is NEE-DED
Console.WriteLine(result);
}
编辑:我回答了另一个与此相关的问题。除了它要求LINQ解决方案,我的答案是以下内容,我认为非常清晰易懂。
var result = String.Join("-", inputData.Split('-').Skip(2));
或者
var result = inputData.Split('-').Skip(2).FirstOrDefault(); //If the last part is NEE-DED then only NEE is returned.
正如其他SO线程中提到的那样,这不是最快的方法。
这应该可以工作:
.*?-.*?-(.*)
正则表达式模式将是:
(?<first>.*)?-(?<second>.*)?-(?<third>.*)?(\s|$)
然后您可以获取命名组“second”,以获取第二个连字符后的测试
或者
您可以执行string.split('-')
并从数组中获取第2项
这应该能解决问题:
([^\-]+)\-([^\-]+)\-(.*?)$