我正在尝试从以下任何格式的字符串中提取传递号码:
PassID_132
PassID_64
Pass_298
Pass_16
为此,我构建了以下正则表达式:
Pass[I]?[D]?_([\d]{2,3})
- 并在Eclipse的搜索对话框中对其进行了测试。它运作良好。
但是,当我在代码中使用它时,它与任何东西都不匹配。这是我的代码片段:
String idString = filename.replaceAll("Pass[I]?[D]?_([\\d]{2,3})", "$1");
int result = Integer.parseInt(idString);
我也试过
java.util.regex.Pattern.compile("Pass[I]?[D]?_([\\d]{2,3})")
调试时表达式窗口中的,但是说“”,而
java.util.regex.Pattern.compile("Pass[I]?[D]?_([0-9]{2,3})")
编译,但没有匹配任何东西。可能是什么问题?
答案 0 :(得分:2)
而不是通过[I]?[D]?_([\ d] {2,3})试试这个:
Pass(?:I)?(?:D)?_([\d]{2,3})
答案 1 :(得分:1)
你的tegex没有无效,但它很糟糕。您不需要围绕单个字符术语的字符类。试试这个:
"Pass(?:ID)?_(\\d{2,3})"