字符串正则表达式找到数字

时间:2013-06-30 22:09:57

标签: c#

我遇到了正则表达式的问题。 我有一条线 折叠|复制代码

  

合约Nr.123456,reg.Nr.654321-118

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

这就是我提出的,但不知道接下来该做什么 折叠|复制代码

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

任何想法? 谢谢。

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

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

2 个答案:

答案 0 :(得分:0)

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

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

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

Console.WriteLine(regex.Match(stuff).Value);

答案 1 :(得分:0)

有很多方法可以做到这一点。例如,你可以匹配\ d +和\ d + - \ d +和THEN只选择\ d + 1。虽然,我喜欢前瞻和后视方法(注意:为了便于阅读,我引入了换行符和注释,但它们应该是卸妆)

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