Регулярное выражение не работает с одним символом - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь написать регулярное выражение в Java, чтобы оценить две строки, упомянутые с (), разделенные,

Example: (test1,test2)

Я написал ниже код

public static void main(String[] a){
    String pattern = "\\([a-zA-Z0-9]+,[a-zA-Z0-9]+.\\)";
    String test = "(test1,test2)";
    System.out.println(test.matches(pattern));
}

Это работаеткак и ожидалось и печатает true в следующих случаях

String test = "(test1,test2)";

String test = "(t,test2)";

Но он печатает false, когда я отправляю ниже

String test = "(test1,t)";

Это странно, потому что я использую то же выражение до ипосле,

Возвращает true для (t,test2), но не для (test1,t)

Пожалуйста, дайте мне знать, что мне не хватает в этом регулярном выражении.Мне нужно это оценить и вернуть true для (test1,t)

Ответы [ 7 ]

0 голосов
/ 11 сентября 2018

В вашем регулярном выражении '.'не требуется в последней части.изменение в виде "\ ([a-zA-Z0-9] +, [a-zA-Z0-9] + \)", так что оно будет возвращать true для "(test, t)"

String pattern = "\\([a-zA-Z0-9]+,[a-zA-Z0-9]+\\)";
String test = "(te,t)";
System.out.println(test.matches(pattern)); // true
0 голосов
/ 11 сентября 2018
String pattern = "\\([a-zA-Z0-9]+,[a-zA-Z0-9]+\\)";
String test = "(test1,test2)";
String t1 = "(t,test2)";
String t2="(test2,t)";
System.out.println(test.matches(pattern));
System.out.println(t1.matches(pattern));
System.out.println(t2.matches(pattern));

просто попробуйте этот код, он даст вам ответ, который вы хотите.

Вы написали "." в конце после + в вашем шаблоне, так что очистите его.

0 голосов
/ 11 сентября 2018

и даже проще, вы можете использовать \ w для слов, вы можете использовать вместо [a-zA-Z0-9]

, чтобы ваше регулярное выражение было таким:

\(\w+,\w+\)
0 голосов
/ 11 сентября 2018

Используйте это регулярное выражение:

String pattern = "^\\(.+,.+\\)";

Это будет соответствовать вашим требуемым строкам.

0 голосов
/ 11 сентября 2018

Удалить точку после второй группы [a-zA-Z0-9]

Демо

0 голосов
/ 11 сентября 2018

Во второй части вашего паттерна у вас есть "[a-zA-Z0-9]+."

Если вы пытаетесь сопоставить "t", он увидит t для части [a-zA-Z0-9]+, но для этого потребуется другойпосле этого, чтобы соответствовать части ..

Исправленный образец: "\\([a-zA-Z0-9]+,[a-zA-Z0-9]+\\)"

0 голосов
/ 11 сентября 2018

Нет необходимости в . (соответствует одному символу) в вашем регулярном выражении. Удалите . из вашего регулярного выражения, чтобы оно стало "\\([a-zA-Z0-9]+,[a-zA-Z0-9]+\\)", и оно должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...