如何将 java 中的模式与以下字符串的断言 J 匹配

How to match the patterns in java with assert J for below string

我有这样的字符串

String xyz ="JAVAxxxxxxxxxxxxxx   ID: 123678   VERSION: 3"

我想知道如何验证它是否符合特定模式。

我是这样断言的

assertThat(xyz).containsPattern("[A-Za-z]* ID: [0-9]* VERSION: [0-9]* ");

我认为您正在寻找的方法是matches()。此外,您的正则表达式与给定的字符串不匹配。该字符串在 'blocks' 之间包含多个空格。因此,您需要在正则表达式中指定:

assertThat(xyz).matches("[A-Za-z]* +ID: [0-9]* +VERSION: [0-9]*");

以 stevecross 的回答为基础,请注意建议的表达方式非常宽松。例如,它将匹配:

String xyz =" ID: VERSION: "

如果需要,您可以在匹配上更加严格。比如说,如果你需要确保非空白词,使用 + 而不是 * 像这样:

assertThat(xyz).matches("[A-Za-z]+ +ID: [0-9]+ +VERSION: [0-9]+");

并且如果您需要在键值对之间恰好有三个 space,则将 {3} 添加到仅包含 space 的 class 个字符中( [ ]),像这样:

assertThat(xyz).matches("[A-Za-z]*[ ]{3}ID: [0-9]*[ ]{3}VERSION: [0-9]*");

我发现在线正则表达式评估器很有帮助。看这个例子:https://regex101.com/