Полагаю,
^(?!.*([ ']).*\\1)[A-Za-z' -]*$
может работать нормально.
Здесь,
(?!.*([ ']).*\\1)
мы пытаемся сказать, что если бы была горизонтальнаяпробел (\ h) или одинарная кавычка (') дважды в строке, исключите те, которые мы будем хранить только с нулями или одним повторением.
Тест
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegularExpression{
public static void main(String[] args){
final String regex = "^(?!.*([ ']).*\\1)[A-Za-z' -]*$";
final String string = "abcAbc- ";
final Pattern pattern = Pattern.compile(regex);
final Matcher matcher = pattern.matcher(string);
while (matcher.find()) {
System.out.println("Full match: " + matcher.group(0));
for (int i = 1; i <= matcher.groupCount(); i++) {
System.out.println("Group " + i + ": " + matcher.group(i));
}
}
}
}
Вывод
Full match: abcAbc-
Group 1: null
Если вы хотите упростить / изменить / изучить выражение, это объясняется в верхней правой панели regex101.com . Если хотите, вы можете также посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами входных данных.
RegEx Circuit
jex.im визуализирует регулярные выражения: