我所说的是,我正在尝试根据正则表达式制作一个过滤掉字符串数组的方法,但我无法做到这一点。 例如我有一个数组
String[] items = ["6652(1).png", "7876(2).png", "7890-(1).jpg", "6543(1).JPG", "12249(3)-.PNG"]
public ArrayList<String> filterByRegularExpress(String[] items) {
ArrayList<String> filteredStrings = new ArrayList<String>();
for(String item: items) {
if(item.contains("regularexpression")){ // it is in here, i need to do some regular express for number(number).
filteredStrings.add(item);
}
}
System.out.print(filteredStrings);
}
所以结果只有"6652(1).png" , "7876(2).png" , "6543(1).JPG"
我该如何编写这样的正则表达式? 感谢您的帮助。
答案 0 :(得分:1)
尝试使用方法正文:
ArrayList<String> filteredStrings = new ArrayList<String>();
Pattern pat = Pattern.compile("\\A\\d+\\(\\d+\\)\\..+\\z");
for(String item: items) {
Matcher matcher = pat.matcher(item);
if(matcher.matches()){ // it is in here, i need to do some regular express for number(number).
filteredStrings.add(item);
}
}
System.out.print(filteredStrings);
这将根据输入的开头(\\A
)匹配一个字符串,后跟任意数量的数字(至少有一个,\\d+
),后跟一个文字左括号被转义,因为它在正则表达式(\\(
)中有特殊含义,然后括号之间的任意位数(如果在您的方案中只能是一位数,只需删除+
),然后关闭括号,再次像开头一样逃脱,然后是文字。,由于其特殊含义而逃脱。在正则表达式(\\.
)中,我们使用。的特殊含义,这意味着&#34;任何字符&#34;,我们说这里可以有任意数量的任何字符(.+
),然后是字符串的结尾(\\z
)。总而言之,这是一种更易于阅读的方式,它匹配number(number).anything
。在您的示例中,我测试了它并获得了正确的输出[6652(1).png, 7876(2).png, 6543(1).JPG]
。
答案 1 :(得分:0)
你可以用模式
来做Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("There are more than -2 and less than 12 numbers here");
while (m.find()) {
System.out.println(m.group());
}
根据Java正则表达式,+表示&#34;一次或多次&#34;和\ d表示&#34;数字&#34;。
注意:&#34;双反斜杠&#34;是一个获取单个反斜杠的转义序列 - 因此,java字符串中的\ d为您提供实际结果:\ d