我不熟悉模式&匹配器,我很困惑这个问题。
我有一个字符串,我想在Java中操作。 我明白我必须使用
Pattern p = Pattern.compile("\\[(.*?)\\]");
Matcher m = p.matcher(in);
while(m.find()) {
String found = m.group(1).toString();
}
但在我的字符串中,假设我有以下示例:
String in = "test anything goes here [A#1234|567]"; //OR
String in = "test anything goes here [B#1234|567]"; //OR
String in = "test anything goes here [C#1234|567]";
我想在字符串中找到[A# | ]
或[B# | ]
或[C# | ]
,如何使用正则表达式查找表达式?
答案 0 :(得分:1)
在正则表达式中使用[ABC]#
来匹配您的表达式。
Pattern p = Pattern.compile("(\\[[ABC]#.*?\\])");
如果字段为数字,则可以安全地使用\d+
Pattern p = Pattern.compile("(\\[[ABC]#\\d+\\|\\d+\\])");
答案 1 :(得分:1)
我使用简单的Pattern
,如下例所示:
String[] in = { "test anything goes here [A#1234|567]",
"test anything goes here [B#1234|567]",
"test anything goes here [C#1234|567]" };
Pattern p = Pattern.compile("\\[[A-Z]#\\d+\\|\\d+\\]");
for (String s: in) {
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println("Found: " + m.group());
}
}
}
<强>输出强>
Found: [A#1234|567]
Found: [B#1234|567]
Found: [C#1234|567]
我假设您的Pattern
有特定限制:
[
#
|
]
答案 2 :(得分:0)
尝试:
Pattern p = Pattern.compile("(\\[[A-Z]#.*\\])");
如果你想匹配任何大写的A到Z.不清楚你是否想要[]
之间的所有数据。
答案 3 :(得分:0)
我的解决方案:
import java.util.*;
import java.lang.*;
import java.io.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
class Some {
public static void main(String[] args) throws java.lang.Exception {
String[] in = {
"test anything goes here [A#1234|567]",
"test anything goes here [B#1234|567]",
"test anything goes here [C#1234|567]"
};
Pattern p = Pattern.compile("\\[(.*?)\\]");
for (String s: in ) {
Matcher m = p.matcher(s);
while (m.find()) {
System.out.println("Found: " + m.group().replaceAll("\\d", ""));
}
}
}
}
这使用您的原始正则表达式。