2013-06-30 50 views
0

我在使用正則表達式時遇到問題。我有一條線 Collapse |複製代碼字符串找到數字的正則表達式

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

我想使用僅查找字符串123456正則表達式,但沒有找到第二個6 digit- 3 (654321-118)

這就是我想到的,但不知道下一步該怎麼做 Collapse | Copy Code

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

任何想法? 謝謝。

---逗號不具體,我想我需要建立正則表達式所以它並沒有發現與結尾的字符串的「 - 」號

---這是在付款細節銀行,現場接收者信息。有兩組可能的數字xxxxxx和xxxxxx-xxx,我只需要找到第一個。

+0

你的正則表達式是正確的...... –

+5

如果總是有兩個這樣的組,並且你只想找到第一組,那麼就不要搜索後面的第二個......'Regex.Match()'會在字符串中找到**第一次出現的模式,然後(不要)使用'Match.NextMatch()'來獲得下一個出現。 – millimoose

+0

否則,您可以使用負面預測:'\ d {4,6}(?! - )'。 (如果4-6位數字位於字符串的末尾,您的原始正則表達式會失敗,因爲它需要一個不是'-'的字符。) – millimoose

回答

0

有點粗糙,但如果它是純粹的數字只有你所關心的,只有第一次出現的,那麼你可以做一些簡單的像,

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

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

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

有很多方法可以做到這一點。例如,您可以匹配\ d +和\ d + - \ d +,然後選擇\ d + \ ones。雖然,我喜歡前瞻,看看隱藏方法(注:我公司推出的換行和註釋,可讀性,他們應該是卸妝)

(?<!\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 

注意:與下一次嘗試更加具體,因爲,說實話,答案TH你問的問題是「匹配'123456'的正則表達式是...'123456'」。

注意:我用LinqPad進行了測試。

相關問題