2017-07-26 107 views
1

我正在編寫一個正則表達式來匹配包含多於2個單詞的字符串,並且應該至少有1個可用數字或1個沒有數字的單詞。正則表達式來檢查該字符串是否包含多於2個單詞並且有數字

即如果我有以下字符串:

1. "Sample data with no digit" (no digit) 
2. "1004" (less than 2 words) 
3. "1004 1008" (no alphabets) 
4. "1004 data" (exactly 2 words) 
5. "5ample Data with digits" (note that S-> 5) 
6. "Sample Data with 1004" 

正則表達式應該與第五,六絃(理由不取別人與數據一起提及)

我試過以下,但以下總是返回所有字符串:

[\d[0-9]|[ABEGFIHKJLOQPSRUTXZbgfihkjloqpsuz!]]+[\w\s]* (returns all strings) 

請注意,我使用的是JAVA。

請幫助和提前致謝。

+0

即什麼叫一個詞的意思是關於「珠穆朗瑪峯,艾格峯,K2」,怎麼辦? – Bathsheba

+0

試試這個'([0-9] | [a-zA-Z]){2,} \ s *' – Lino

+0

是的,它是一個有效的字符串,應該被提取。每當我們獲得空間時都可以考慮一個詞。所以,在這我們有3個字。 –

回答

1

您可以使用此正則表達式與2向前斷言:

^(?=.*\b[a-zA-Z]*\d+[a-zA-Z]*)(?=.*\b[a-zA-Z]+\b)(?:\w+\h+){2,}\w+ 

RegEx Demo

正則表達式破碎:

  • (?=.*\b[a-zA-Z]*\d+[a-zA-Z]*):前瞻,以確保我們有一個詞以數字
  • (?=.*\b[a-zA-Z]+\b):先行斷言,我們有一句話,沒有位數
  • (?:\w+\h+){2,}\w+:確保我們至少有3個字輸入
+0

這是行得通的。但是我必須用{1,}替換{2,},使其與「data te8st」一起工作 –

+0

爲了確保2個或更多的單詞使用:'^(?=。* \ b [a-zA-Z] * \ d + [A-ZA-Z] *)(?=。* \ b [A-ZA-Z] + \ b)\ W + \ H + \ W +' – anubhava

相關問題