2015-04-07 2 views
1

я использую следующий образец, чтобы проверить, соответствует ли это с этим видом строк:использовать регулярное выражение для строки, содержащие «(число)» шаблон в конце

words that contains any characters and ends with (positive numbers)

assertEquals(true, str.matches("[\\w+ ]*\\(\\d\\)")); 

утверждение возвращает истинное для следующих ситуаций:

str = "one two three (1)"; 
str = "one 2 three to 400 (4)"; 
str = " begins with space (4)"; 
str = "(4)"; 

Но он не на следующее:

str = "one (two) three (1)"; 

Любые предложения?

Спасибо!

+1

«Слова, содержащие * любые * символы», также означают 'f882 && ** &^* (4)' и '* & 274p !!! (1) '? – RealSkeptic

ответ

2

Вам необходимо включить круглые скобки в класс символов - \w эквивалентен [a-zA-Z_0-9], поэтому он не распространяется на них. Также квантификатор + соответствует буквалу +, если он помещен в класс символов, поэтому он должен быть установлен за пределами квадратных скобок. Но так как вы хотите, чтобы также соответствовать случай (4), то оно должно быть * вместо:

assertEquals(true, str.matches("[\\w()]*\\(\\d\\)")); 

В целом, согласно вашему требованию «слов, которые содержат символы и заканчивается (положительные числа)», будущий следующие быть более подходящим:

assertEquals(true, str.matches(".*\\(\\d\\)$")); 

(. соответствует любому символу; $ обозначает конец строки)

+2

Это не соответствует последнему случаю «(4)», так как вы используете символ + (1 или больше) для символа слова/пробела/скобки. Использование * (ноль или более) исправляет его. – FriedSaucePots

0

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

.*\([1-9]+\)

Две вещи отметить здесь:

  1. регулярное выражение, который предоставляется в оригинале post использует \w, который соответствует символам слов: [a-zA-Z0-9_]
  2. \d соответствует цифрам. Это означает, что регулярное выражение также будет соответствовать нулю, которое не является ни положительным, ни отрицательным числом. Если вам нужны только положительные номера, вы должны использовать [1-9]+
Смежные вопросы