2017-07-26 50 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

相关问题