我有一系列字符串,我正在搜索特定的字符组合。我正在寻找一个数字,后跟字母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);
}
任何人都可以建议我做错了吗?
答案 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
字符类(意思相同)
的东西)。答案 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]