正则表达式匹配句子中以特定正则表达式结尾的数字

时间:2017-07-27 16:31:13

标签: regex

我有不可预测的格式化句子:

Parameters: 123? ,345 abc#8678Alfa 666

我需要正则表达式匹配所有数字,除了用 Alfa 结尾。看似简单,但......

这是我的尝试:

([0-9]+)(?!Alfa)

这是正则表达式的结果:

123 345 867 666

867 是我不想要的结果。

你能给我一个提示吗?

3 个答案:

答案 0 :(得分:2)

以下正则表达式适用于您的案例

"(?![0-9]+Alfa)[0-9]+"

    String input = "Parameters: 123? ,345 abc#8678Alfa 666";

    String patternString = "(?![0-9]+Alfa)[0-9]+";

    Pattern pattern = Pattern.compile(patternString);

    Matcher matcher = pattern.matcher(input);

    while (matcher.find()) {
        System.out.println(matcher.group());
    }

// Output will be 123 345 666

?!被称为负前瞻,用于忽略指定模式后的字符串。有关详情,请访问here

希望这有帮助。

答案 1 :(得分:1)

占有量词可以解决问题:([0-9]++)(?!Alfa)(使用perl:m/([0-9]++)(?!Alfa)/g进行测试)。

答案 2 :(得分:1)

对于你的负面预测,你需要锚定你的比赛结束。

使用占有++代替+将取消回溯,因此它会自动锚定到匹配的结尾。 (效率最高,但通常不可用)

没有占有欲,使用(?!Alfa|[0-9])将确保您的匹配不会在阿尔法或数字中间结束。您还可以使用(?=[^0-9]|$)检查您的匹配是否未在数字中间结束。