正则表达式来检查该字符串是否包含多于2个单词并且有数字
问题描述:
我正在编写一个正则表达式来匹配包含多于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。
请帮助和提前致谢。
答
您可以使用此正则表达式与2向前断言:
^(?=.*\b[a-zA-Z]*\d+[a-zA-Z]*)(?=.*\b[a-zA-Z]+\b)(?:\w+\h+){2,}\w+
正则表达式破碎:
-
(?=.*\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
即什么叫一个词的意思是关于“珠穆朗玛峰,艾格峰,K2”,怎么办? – Bathsheba
试试这个'([0-9] | [a-zA-Z]){2,} \ s *' – Lino
是的,它是一个有效的字符串,应该被提取。每当我们获得空间时都可以考虑一个词。所以,在这我们有3个字。 –