我有一个需要使用正则表达式拆分的字符串。我可以在 .NET 中使用拆分方法,但要返回的字符串可能是第一个或第二个子字符串。此正则表达式将成为应用程序中的可配置设置。
一个典型的字符串是 9234567X123456-789
我创建了以下正则表达式
[-09]([^X]*)X
返回第一个子字符串。但是,我丢失了第一个数字,返回 234567。
有任何想法吗?
谢谢。
是的,您丢失了第一个数字,因为它被[-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
}
}
我假设您希望字符串以-
,0
或9
. 如果这是真的,那么您需要的正则表达式(并且在这里使用正则表达式是矫枉过正,除非您还想执行某种验证)是
([-09]\d*)X
或者
([-09][^X]*)X
如果您在之前的部分中允许任何类型的字符(不仅是数字)X
编辑:
可能已经了解您在阅读示例字符串时要查找的内容:
9234567X123456-789
您需要第一组或第二组,每个组都可以有数字或连字符 ( -
)。您可以通过创建两个组来解决此问题:
([\d\-]+)X([\d\-]+)
然后您可以查看 Jon Skeet 的答案以获取数据。你可以使用
match.Groups[1]); //to get 9234567
或者
match.Groups[2]); //to get 123456-789