0

我在使用正则表达式时遇到问题。我有一条线 复制代码

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

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

这就是我想出的,但真的不知道下一步该做什么 复制代码

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

有任何想法吗?谢谢你。

---逗号不具体,我想我需要构建正则表达式,所以它没有找到以“-”符号结尾的字符串

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

4

2 回答 2

0

有很多方法可以做到这一点。例如,您可以同时匹配 \d+ 和 \d+-\d+ ,然后只选择 \d+ 。虽然,我喜欢向前看和向后看的方法(注意:我引入了换行符和注释以提高可读性,它们应该是去除剂)

(?<!\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 对其进行了测试。

于 2013-07-01T00:11:40.370 回答
0

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

const string stuff = "Contract Nr.123456,reg.Nr.654321-118";

var regex = new Regex(@"\d+");

Console.WriteLine(regex.Match(stuff).Value);
于 2013-06-30T23:50:27.593 回答