这是我的字符串
INPUT:
22 TIRES (2 defs)
1 AP(PEAR + ANC)E (CAN anag)
6 CHIC ("SHEIK" hom)
预期输出:
22 TIRES
1 APPEARANCE
6 CHIC
实际输出:
TIRES
APPEARANCE
CHIC
我尝试使用以下代码并获得上述输出。
String firstnames =a.split(" \\(.*")[0].replace("(", "").replace(")", "").replace(" + ",
"");
如何随数字一起提取?我不想要在输入“22 TIRES(2 defs)”中的括号之后的数字。我需要输出为“22轮胎”任何帮助都会很棒!!
答案 0 :(得分:0)
我会使用一个replaceAll函数。
str.replaceAll("\\s+\\(.*|\\s*\\+\\s*|[()]", "");
\\s+\\(.*
,这会匹配空格和以下(
字符以及此模式后面的所有剩余字符。因此,您的示例中的(CAN anag)
部分已匹配。
\\s*\\+\\s*
将+
与前后空格匹配。
[()]
匹配左右括号。
Atlast将所有匹配的字符替换为空字符串。
答案 1 :(得分:0)
我的做法有点不同
String line = "22 TIRES (2 defs)\n\n1 AP(PEAR + ANC)E (CAN anag)\n\n6 CHIC (\"SHEIK\" hom)";
String pattern = "(\\d+\\s+)(.*)\\(";
Pattern r = Pattern.compile(pattern);
Matcher m = r.matcher(line);
while (m.find()) {
String tmp = m.group(1) + m.group(2).replaceAll("[^\\w]", "");
System.out.println(tmp);
}
<强> Ideone Demo 强>