Java / Regex - 在String中的任何位置查找字符

时间:2013-08-19 12:53:01

标签: java regex

我有一系列字符串,我正在搜索特定的字符组合。我正在寻找一个数字,后跟字母m或M,后跟一个数字,然后是字母f或F.

示例字符串是 - “Class(4) 1m5f Good” - 粗体文本是我想从字符串中提取的内容。

这是我的代码,但不起作用。

Pattern distancePattern = Pattern.compile("\\^[0-9]{1}[m|M]{1}[0-9]{1}[f|F]{1}$\\");
Matcher distanceMatcher = distancePattern.matcher(raceDetails.toString());
while (distanceMatcher.find()) {
 String word= distanceMatcher.group(0);
 System.out.println(word);
}

任何人都可以建议我做错了吗?

3 个答案:

答案 0 :(得分:3)

正则表达式开头和结尾的^$字符为anchors - 它们将您限制为仅包含您正在寻找的模式的字符串。第一步是删除它们。

然后,您可以使用word boundaries\b)来限制您正在寻找的整个单词格式,如下所示:

Pattern distancePattern = Pattern.compile("\\b\\d[mM]\\d[fF]\\b");

...或者,如果你不介意你的模式出现在一个单词的中间,例如“Class(4)a1m5f Good”,你可以放弃单词边界:

Pattern distancePattern = Pattern.compile("\\d[mM]\\d[fF]");

快速说明:

  • 你到处都不需要{1} - 默认假设 是一个角色或角色类正在发生一次。
  • 你可以 用[0-9]替换\d字符类(意思相同) 的东西)。
  • 这两个链接都是regular-expressions.info,这是一个了解正则表达式的重要资源,我强烈建议您查看:)

答案 1 :(得分:1)

我会使用字边界\b

\b\d[mM]\d[fF]\b

对于java,反斜杠将被转义:

\\b\\d[mM]\\d[fF]\\b

{1}是多余的 [m|M]表示m|M

答案 2 :(得分:0)

对于a digit, following by the letter m or M, followed by a digit, then followed by the letter f or F正则表达式的要求,可以简化为:

Pattern distancePattern = Pattern.compile("(?i)\\dm\\df");

其中:

(?i) - For ignore case
\\d  - For digits [0-9]