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,我只需要找到第一组。
有点粗糙,但如果它是纯数字,只有你关心,而且只是它的第一次出现,那么你可以做一些简单的事情,比如
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进行了测试。