【问题标题】:Java regex to check that string contains more than 2 words and has digitsJava 正则表达式检查字符串是否包含超过 2 个单词并且有数字
【发布时间】:2017-07-26 14:42:37
【问题描述】:

我正在编写一个正则表达式来匹配包含超过 2 个单词的字符串,并且应该至少有 1 个可用数字或 1 个没有数字的单词。

即如果我有以下字符串:

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"

正则表达式应该匹配第 5、6 个字符串(数据中提到了不获取其他字符串的原因)

我尝试了以下但以下总是返回所有字符串:

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

请注意,我使用的是 JAVA。

请提前帮助和感谢。

【问题讨论】:

  • “珠穆朗玛峰、艾格峰、K2”的意思是什么?
  • 试试这个([0-9]|[a-zA-Z]){2,}\s*
  • 是的,它是一个有效的字符串,应该被提取。只要我们得到一个空格,就可以考虑一个词。所以,在这我们有 3 个词。
  • @Lino,共享的正则表达式匹配“data”字符串而不是“data data 2”
  • “应该至少有 1 个可用数字或 1 个没有数字的单词” - 这没有意义,因为任何字母数字字符串都满足此要求。

标签: java regex


【解决方案1】:

您可以将此正则表达式与 2 个前瞻断言一起使用:

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

RegEx Demo

RegEx 拆分:

  • (?=.*\b[a-zA-Z]*\d+[a-zA-Z]*): 提前确保我们有一个带数字的单词
  • (?=.*\b[a-zA-Z]+\b): 提前断言我们有一个没有数字的单词
  • (?:\w+\h+){2,}\w+: 确保我们至少输入了 3 个单词

【讨论】:

  • 这是有效的。但是我不得不用 {1,} 替换 {2,} 以使其与“data te8st”一起使用
  • 为确保 2 个或更多单词使用:^(?=.*\b[a-zA-Z]*\d+[a-zA-Z]*)(?=.*\b[a-zA-Z]+\b)\w+\h+\w+
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
相关资源
最近更新 更多