正则表达式获取字符后的字符串

时间:2014-03-26 13:45:04

标签: c# .net regex

我有像A1234-111,D890-222,A456-333等字符串...... 如何使用正则表达式获取“ - ”字符后的所有内容(右侧)。

提前谢谢。

7 个答案:

答案 0 :(得分:2)

正则表达式通过能够命名和提取匹配(在正则表达式术语中命名匹配捕获组)而闪耀。

在这里,我已经在模式中命名了两个边,一旦获得,只需从所需的那个中提取。

var data = "A1234-111";
var pattern = @"(?<Pre>[^-]+)-(?<Post>.+)";

var mtch = Regex.Match(data, pattern);

Console.WriteLine ("Pre is {0} and Post is {1}", mtch.Groups["Pre"], mtch.Groups["Post"]);

// Result
// Pre is A1234 and Post is 111

答案 1 :(得分:0)

使用空字符串替换-之前的任何内容。

string input = " A1234-111";
input = Regex.Replace(input, @".*?-", "");

答案 2 :(得分:0)

您可以使用正则表达式

(?<=-)\d+

(?<=...)是一个外观。

答案 3 :(得分:0)

分割两次可能更容易:

foreach (string s in myString.Split(','))
{
    string afterHyphen = s.Split('-')[1];
}

答案 4 :(得分:0)

你真的不需要正则表达式,是吗?

List<string> result = input.Split(',')
    .Select(s => s.Split('-').Last())
    .ToList();

答案 5 :(得分:0)

如果您需要搜索整个字符串,请使用:

(?[A-Za-z]\d+\-(\d+),)+

第一组是非捕获用于在逗号之间对项目进行分组,第二组正在捕获以实际匹配您的数字。

如果您需要单独搜索由逗号分隔的字符串,那么最好使用String.Split,或者:

[A-Za-z]\d+\-(\d+)

您可以将[A-Za-z]\d替换为\w

答案 6 :(得分:0)

使用C#,您必须包含System.Text.RegularExpressions库,然后运行匹配:

using System.Text.RegularExpressions;
...
  Regex rx = new Regex(@"[^\-]\-(.*)");
  string s = "A1234-111";
  Match m = rx.Match(s);
  System.Diagnostics.Debug.WriteLine("Match is " + m.Groups[1].Value);
...

我知道你问过Regex,但只要模式相同,你就可以对文本进行拆分:

string[] parts = s.Split(new char[] { '-' });
System.Diagnostics.Debug.WriteLine("Split Match is " + parts[1]);

无论什么效果最好。 :)