我试图编写一个Java方法,它将字符串作为参数,如果匹配模式则返回另一个字符串,否则返回null
。模式:
:
"); 因此,一些符合此模式的有效字符串:
50: hello
1: d
10938484: 394958558
不的一些字符串符合此模式:
korfed49
: e4949
6
6:
6:sdjjd4
该方法的一般骨架是:
public String extractNumber(String toMatch) {
// If toMatch matches the pattern, extract the first number
// (everything prior to the colon).
// Else, return null.
}
到目前为止,这是我最好的尝试,但我知道我错了:
public String extractNumber(String toMatch) {
// If toMatch matches the pattern, extract the first number
// (everything prior to the colon).
String regex = "???";
if(toMatch.matches(regex))
return toMatch.substring(0, toMatch.indexOf(":"));
// Else, return null.
return null;
}
提前致谢。
答案 0 :(得分:4)
您的描述是现货,现在只需要翻译成正则表达式:
^ # Starts
\d+ # with a number (1+ digits); then followed by
: # A colon (":"); then followed by
# A single whitespace (" "); then followed by
\w+ # Any word character, one one more times
$ # (followed by the end of input)
在Java字符串中给予:
"^\\d+: \\w+$"
您还想捕获数字:在\d+
周围加上括号,使用Matcher
,如果匹配则捕获第1组:
private static final Pattern PATTERN = Pattern.compile("^(\\d+): \\w+$");
// ...
public String extractNumber(String toMatch) {
Matcher m = PATTERN.matcher(toMatch);
return m.find() ? m.group(1) : null;
}
注意:在Java中,\w
仅匹配ASCII字符和数字(例如,.NET语言不是这种情况),它也会匹配下划线。如果您不想使用下划线,可以使用(Java特定语法):
[\w&&[^_]]
对于正则表达式的最后一部分,而不是\w
,给出:
"^(\\d+): [\\w&&[^_]]+$"
答案 1 :(得分:2)
尝试使用以下内容:\ d +:\ w +