由点分隔的两部分字符串的正则表达式

时间:2018-10-29 11:13:08

标签: java regex

我需要为由'。'分隔的两部分字符串编写正则表达式。下面是条件,

  1. <<第一部分>>。<<第二部分>>:示例-Time01.Sheet
  2. 第一部分应包含字母数字字符,并且必须至少包含1个大写字母,1个小写字母和1个数字。
  3. 第二部分应包含字母数字字符。

我的代码((?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=\\S+$).*)[.]([\\w]+)$

输入Vijay.hello876IUY

实际输出Valid data

预期输出:无效数据(因为第一部分没有任何数字)

任何人都可以帮助我解决这个问题...

1 个答案:

答案 0 :(得分:3)

您可以使用

^(?=[^.]*[a-z])(?=[^.]*[A-Z])(?=[^.]*[0-9])[a-zA-Z0-9]+\.[a-zA-Z0-9]+$

请参见regex demo

详细信息

  • ^-字符串的开头
  • (?=[^.]*[a-z])-除.之外,0 +字符后必须有一个小写ASCII字母
  • (?=[^.]*[A-Z])-除.之外,0 +字符后必须有一个大写ASCII字母
  • (?=[^.]*[0-9])-除.以外的0+个字符后必须有一个数字
  • [a-zA-Z0-9]+-1个以上字母数字字符
  • \.-一个点
  • [a-zA-Z0-9]+-1个以上字母数字字符
  • $-字符串的结尾。

在Java中:

s.matches("(?=[^.]*[a-z])(?=[^.]*[A-Z])(?=[^.]*[0-9])[a-zA-Z0-9]+\\.[a-zA-Z0-9]+")

由于matches()需要完整的字符串匹配,因此您不需要在开头^,也不需要在结尾$