2013-05-27 70 views
2

我想從字符串中提取一個正好5位數的數字。需要正則表達式解析後的結果整數

如果我嘗試

\d{5} 

這個工程的"12345""a12345a",但它也匹配字符串"123456",我不希望在"12345"

我可以嘗試

\d{5}\D 

但隨後的字符串"12345a"將在` 「a12345a」 相匹配。有沒有拿到這個號碼?

+0

發佈最後一位的正確方法是作爲答案,而不是問題的一部分。 – CrazyCasta

+0

你測試了你的正則表達式嗎?它似乎不會匹配'12345d' ... – Jerry

+0

我沒有足夠的聲望! –

回答

2

要匹配一些正是五個數字,即使它是由字母所包圍,使用正則表達式

(?<!\d)\d{5}(?!\d) 

這符合五個數字(\d{5}),這既不是之前((?<!\d)),也不遵循((?!\d))以數字表示。

單詞界限(\b)在這裏不起作用,因爲他們不允許12345匹配a12345a

regex101.com上查看演示。

+0

如果我無法斷言該怎麼辦?這是不可能的嗎? –

+0

@AlexChap:你是什麼意思?我認爲這是你的目的,斷言在5位數比賽後沒有字母或數字? –

+0

哦,我以爲你的意思是它只有在我斷言「精神上」時纔有效。無論如何,我的整個觀點是,數字後面可能會有一個字母,比如12345a,但對於12345a和a12345以及「12345」,它只會得到12345相同的字母。我希望你明白 –

1

(\d{5})[^a-zA-Z]是正確的方法。

(\d{5})正在捕獲的是5個數字而[^a-zA-Z]表示下一個字符不能是字母。

編輯: 爲了清楚起見:當你想擁有由邊界的(標記像' , . ",當然還有空間環繞5位數字\b(\d{5})\b用於

+0

新版本應該做的伎倆(或者我的其他解決方案是什麼意思?) – B8vrede

+0

另外,請注意[^ a-zA-Z]甚至不開始涵蓋「字母」的定義,除非你限制輸入到7位ASCII碼。 – Aurand

+0

你一個不會因爲它還是讓我123456我只要5個號碼! –

0
/\d{5}[^\d]/ 

這匹配了一個由5位數字後跟非數字字符組成的序列。