这是以下字符串
(R01)(R10)
输出应该是这样的:
1
10
我正在使用\\)|\\(|[A-Z]
,但它不起作用
我该怎么办?
答案 0 :(得分:1)
您可以使用以下正则表达式:
"\\(R0*(\\d+)\\)"
表示表达式:
"\\( \\)"
0*
。 (\\d+)
0*
将消耗匹配的第一个数字之前出现的每个0。因此,在' 000'的情况下,0*
将消耗前两个0,因为我们需要至少一个数字后(这将是最后的0)。可能会涉及一些回溯。
例如:
String s = "(R0)(R10)(R001)(R000)";
Pattern p = Pattern.compile("\\(R0*(\\d+)\\)");
Matcher m = p.matcher(s);
while(m.find()) {
System.out.println(m.group(1));
}
输出:
0
10
1
0
答案 1 :(得分:0)
try {
String resultString = subjectString.replaceAll("([^\\d][0]|\\D)", "");
} catch (PatternSyntaxException ex) {
// Syntax error in the regular expression
} catch (IllegalArgumentException ex) {
// Syntax error in the replacement text (unescaped $ signs?)
} catch (IndexOutOfBoundsException ex) {
// Non-existent backreference used the replacement text
}
([^\d][0]|\D)
Match the regex below and capture its match into backreference number 1 «([^\d][0]|\D)»
Match this alternative «[^\d][0]»
Match a single character that is NOT a “digit” «[^\d]»
Match the character “0” literally «[0]»
Or match this alternative «\D»
Match a single character that is NOT a “digit” «\D»
答案 2 :(得分:0)
对于正则表达式位,您可能想了解lookahead/lookbehind
(?<=R)\d+
然后在匹配项上使用Integer.parseInt
。
练习正则表达式:http://www.regexplanet.com/advanced/java/index.html和其他许多人
答案 3 :(得分:0)
你可以这样做:
String in = "(R01)(R10)";
System.out.println(Arrays.toString(
Pattern.compile("(?:\\D+0*)").splitAsStream(in)
.filter(x -> x.length()>0).toArray()
));
输出:[1, 10]
这个结构的优点是你可以轻松扩展它,例如获取浮点数而不是字符串:
String in = "(R01)(R10)";
System.out.println(Arrays.toString(
Pattern.compile("(?:\\D+)").splitAsStream(in)
.filter(x -> x.length() > 0).map(Float::parseFloat)
.toArray()
));
输出:[1.0, 10.0]
答案 4 :(得分:0)
此代码适用于您:
public static void main(String[] args) {
String s = "(R01)(R10)";
s = s.replaceAll(".*?(\\d+.*\\d+).*", "$1"); // replace leading/ trailing non-numeric charcaters.
String[] arr = s.split("\\D+"); // split based on non-numeric characters
for (int i = 0; i < arr.length; i++) {
arr[i] = String.valueOf(Integer.parseInt(arr[i])); // convert to base-10 i.e, remove the leading "0"
}
for (String str : arr)
System.out.println(str);
}
O / P:
1
10