string查找数字的Regex

本文关键字:Regex 数字 查找 string | 更新日期: 2023-09-27 18:20:34

我的Regex有问题。我有一条线折叠|复制代码

合同编号:123456,注册号:654321-118

我想使用一个正则表达式,它只查找字符串123456,但不查找第二个6位-3位的字符串(654321-118)

这就是我的想法,但我真的不知道下一步该怎么办折叠|复制代码

string regex4 = @"'d{4,6}[^-]";

有什么想法吗?非常感谢。

---逗号不是特定的,我想我需要构建正则表达式,这样它就找不到以"-"号结尾的字符串

---这是银行中的付款详细信息,字段收款人信息。有两组可能的数字xxxxxx和xxxxxx-xxxx,我只需要找到第一组。

string查找数字的Regex

有点粗糙,但如果它是纯数字,只有你关心,而且只是它的第一次出现,那么你可以做一些简单的事情,比如

const string stuff = "Contract Nr.123456,reg.Nr.654321-118";
var regex = new Regex(@"'d+");
Console.WriteLine(regex.Match(stuff).Value);

有很多方法可以做到这一点。例如,您可以同时匹配''d+和''d+-''d+,然后只选择''d+。尽管如此,我还是喜欢"向前看"answers"向后看"的方法(注意:为了可读性,我引入了换行符和注释,它们应该是删除符)

(?<!'d+-'d*) -- there is NO number in front
'd+          -- I AM THE number
(?!'d*-'d+)  -- there is NO number behind

因此,您的正则表达式看起来像:

const string stuff = "Contract Nr.123456,reg.Nr.654321-118";
var rx = new Regex(@"(?<!'d+-'d*)'d+(?!'d*-'d+)");
Console.WriteLine(rx.Match(stuff).Value);
// result: 123456

或者,如果您想要字符串中的所有非连字符数字:

const string stuff = "Contract Nr.123456,reg.Nr.654321-118 and 435345";
var rx = new Regex(@"(?<!'d+-'d*)'d+(?!'d*-'d+)");
var m = rx.Match(stuff);
while (m.Success)
{
    Console.WriteLine(m.Value);
    m = m.NextMatch();
}
// result: 123456 and 435345

注意:下次试着更具体一点,因为说实话,你问的问题的答案是"匹配‘123456’的正则表达式是……‘123456"。

注意:我用LinqPad进行了测试。