我想将字符串[AO_12345678, Real Estate]
分为AO_12345678
和Real Estate
如何使用正则表达式在Java中执行此操作?
面临的主要问题是避免“[”和“]” 请帮忙
答案 0 :(得分:4)
它真的必须是正则表达式吗?
如果不是:
String s = "[AO_12345678, Real Estate]";
String[] split = s.substring(1, s.length()-1).split(", ");
答案 1 :(得分:2)
我会采取务实的方式:
String org = "[AO_12345678, Real Estate]";
String plain = null;
if(org.startsWith("[") {
if(org.endsWith("]") {
plain = org.subString(1, org.length());
} else {
plain = org.subString(1, org.length() + 1);
}
}
String[] result = org.split(",");
如果字符串始终用'[]'包围,则可以直接对其进行子串,而不进行检查。
答案 2 :(得分:1)
假设所有输入的格式一致,一种简单的方法是完全忽略正则表达式并将其拆分。以下内容可行:
String[] parts = input.split(","); // parts is ["[AO_12345678", "Real Estate]"]
String firstWithoutBrace = parts[0].substring(1);
String secondWithoutBrace = parts[1].substring(0, parts[1].length() - 1);
String first = firstWithoutBrace.trim();
String second = secondWithoutBrace.trim();
当然,您可以根据需要定制 - 例如,您可能需要在删除大括号之前检查大括号是否存在。或者您可能希望在逗号之前保留任何空格作为第一个字符串的一部分。这应该为您提供根据您的具体要求进行修改的基础。
在这样一个简单的例子中,我更喜欢像上面这样的代码来提取两个字符串的正则表达式 - 我认为前者更清晰了!
答案 3 :(得分:1)
您也可以使用StringTokenizer。这是代码:
String str="[AO_12345678, Real Estate]"
StringTokenizer st=new StringTokenizer(str,"[],",false);
String s1 = st.nextToken();
String s2 = st.nextToken();
S1 = AO_12345678
s1 =房地产
请参阅javadocs以了解有关StringTokenizer的信息
http://download.oracle.com/javase/1.4.2/docs/api/java/util/StringTokenizer.html
答案 4 :(得分:0)
使用正则表达式(RE)捕获组的另一个选项:
private static void extract(String text) {
Pattern pattern = Pattern.compile("\\[(.*),\\s*(.*)\\]");
Matcher matcher = pattern.matcher(text);
if (matcher.find()) { // or .matches for matching the whole text
String id = matcher.group(1);
String name = matcher.group(2);
// do something with id and name
System.out.printf("ID: %s%nName: %s%n", id, name);
}
}
如果需要考虑速度/记忆,RE可以优化为(使用占有量词而不是贪婪量词)
"\\[([^,]*+),\\s*+([^\\]]*+)\\]"