首页 > 解决方案 > 正则表达式需要一个字母和一个非字母并且没有空格

问题描述

我想在 Java 中创建一个正则表达式来匹配至少 1 个字母和 1 个非字母(可以是除 A-Za-z 之外的任何东西)并且没有空格。

下面的正则表达式部分正确:

^([A-Za-z]{1,}[^A-Za-z]{1,})+$

它匹配 aaaa7777 但不匹配 777aaaaa。

任何帮助,将不胜感激。

标签: javaregex

解决方案


您的正则表达式隐含地假定您要匹配的字符的顺序。正则表达式是说一个字母必须在一个非后者之前。但是,您希望字母和非字母以任一顺序出现,因此您需要考虑这两种情况。另请注意,它应该[^\sa-zA-Z]代替,[^a-zA-Z]因为您不允许使用空格。

(?:[a-zA-Z][^\sa-zA-Z]|[^\sa-zA-Z][a-zA-Z])

在开始和结束时,允许使用任何非空格字符,因此:

^\S*(?:[a-zA-Z][^\sa-zA-Z]|[^\sa-zA-Z][a-zA-Z])\S*$

推荐阅读