我有一个字符串,我需要使用正则表达式进行拆分。我可以在.NET中使用split方法,但要返回的字符串可以是第一个或第二个子字符串。此正则表达式将成为应用程序中的可配置设置。
典型字符串为9234567X123456-789
我创建了以下正则表达式
[-09]([^X]*)X
返回第一个子字符串。但是,我丢失了第一个数字,返回了234567。
有什么想法吗?
感谢。
答案 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)
我假设您希望字符串以-
,0
或9
开头。如果这是真的,那么你需要的正则表达式(并且在这里使用正则表达式是过度的,除非你想进行某种验证)是
([-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