C#Regular Expression分割字符串并返回任一子字符串

时间:2012-10-26 14:36:24

标签: c# regex

我有一个字符串,我需要使用正则表达式进行拆分。我可以在.NET中使用split方法,但要返回的字符串可以是第一个或第二个子字符串。此正则表达式将成为应用程序中的可配置设置。

典型字符串为9234567X123456-789

我创建了以下正则表达式

     [-09]([^X]*)X

返回第一个子字符串。但是,我丢失了第一个数字,返回了234567。

有什么想法吗?

感谢。

2 个答案:

答案 0 :(得分:2)

是的,你丢失了第一个数字,因为[-09]部分正在使用它。目前尚不清楚你为什么会这样做。我怀疑你只是想要:

([^X]*)X

换句话说,“在第一个X之前捕获所有内容,并检查是否确实存在X.”

示例代码:

using System;
using System.Text.RegularExpressions;

public class Test
{
    static void Main(string[] args)
    {
        Regex regex = new Regex("([^X]*)X");
        string input = "9234567X123456-789";
        Match match = regex.Match(input);
        // TODO: Check for success
        Console.WriteLine(match.Groups[1]); // 9234567
    }
}

答案 1 :(得分:0)

我假设您希望字符串以-09开头。如果这是真的,那么你需要的正则表达式(并且在这里使用正则表达式是过度的,除非你想进行某种验证)是

([-09]\d*)X

OR

([-09][^X]*)X

如果您在X

之前的部分允许任何类型的字符(不仅仅是数字)

编辑

可能已经理解了您正在寻找的样本字符串:

9234567X123456-789

您需要第一组或第二组,每个组都可以有数字或超级(-)。您可以通过创建两个组来解决此问题:

([\d\-]+)X([\d\-]+)

然后你可以检查Jon Skeet的答案来获取数据。你可以使用

match.Groups[1]); //to get 9234567

match.Groups[2]); //to get 123456-789