1

我正在尝试从以下任何格式的字符串中提取通行证号:

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})")

编译,但没有匹配任何东西。可能是什么问题呢?

4

2 回答 2

2

而不是 Pass[I]?[D]?_([\d]{2,3}) 试试这个:

Pass(?:I)?(?:D)?_([\d]{2,3})
于 2013-07-25T11:34:52.730 回答
1

你的 tegex没有什么无效的,但它很糟糕。您不需要围绕单个字符术语的字符类。尝试这个:

"Pass(?:ID)?_(\\d{2,3})"
于 2013-07-25T11:49:21.137 回答