Java RegEx - для целого числа, не содержащего "." - PullRequest
1 голос
/ 26 февраля 2012

Мне нужно иметь возможность возвращать целочисленные константы со знаком и без знака без промежуточные символы, возможно, предшествующие + или -. Допустимые цифры: 3, 4 и 5.

Я не могу найти способ сказать, что выражение не должно содержать точку до или после целого числа.

Это то, что я имею до сих пор, но если я скажу «34,5 - 43», вернется строка: «34 5 43».

Все, что нужно вернуть, это "43".

public String getInts(String toBeScanned){

    String INT = "";
    Pattern p = Pattern.compile("\\b[+-]?[3-5]+\\b");
    Matcher m = p.matcher(toBeScanned);

    if (m.matches() == true){
        INT = toBeScanned;
    }
    else{
        m = p.matcher(" " + toBeScanned);
        while (m.find()){
        INT = INT + m.group() + " ";
        }
    }
    return INT;
}

Любые мысли или толчки в правильном направлении приветствуются. Есть ли способ сказать, что первым и последним символом может быть [\ b, а не.]

Это расстраивает меня до чертиков. Помогите!

Ответы [ 3 ]

2 голосов
/ 26 февраля 2012

Вы не хотите границы слова \b здесь.Я думаю, что лучше всего создать собственное утверждение, попробуйте это

(?<![.\d])[+-]?[3-5]+(?![.\d])

Посмотрите его здесь, на Regexr

(?<![.\d]) - это отрицательный взгляд за утверждением, он говоритперед тем, как в шаблоне нет точек и не допускается ни одна цифра.

(?![.\d]) является отрицательным предварительным утверждением, в нем говорится, что после того, как в образце нет точек и не допускаются цифры.1016 *

чтобы избежать совпадения с такими словами, как "hf34", мы можем сделать его более строгим

(?<![.\w])[+-]?[3-5]+(?![.\w])

См. в Regexr

Граница слова \b

\b совпадает при переходе от символа слова к символу, не являющемуся словом.Символ слова представляет собой букву или цифру или _.Это означает, что у вас также будут проблемы с \b до [+-], потому что между пробелом / началом строки и [+-].

нет \b.
0 голосов
/ 26 февраля 2012

Можно ли сказать, что первым и последним символом может быть [\ b, а не.]

[^\.\b]

соответствует \ b, но не '.'

Это то, что вы ищете?

[^\.\b][+-]?[3-5]+[^\.\b]

Будет соответствовать '43', но не '34 .5 '

0 голосов
/ 26 февраля 2012

"\ b [+ -]? [3-5] + [.] [3-5] + \ b"

Этот шаблон говорит, что для соответствия должен быть хотя бы одинчисло до и одно число после десятичной точки.

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