我需要Java RegEx来拆分,或者在字符串中查找内容,但是要排除双引号之间的内容。我现在做的是:
String withoutQuotes = str.replaceAll("\\\".*?\\\"", "placeholder");
withoutQuotes = withoutQuotes.replaceAll(" ","");
但这对indexOf不起作用,我还需要能够拆分,例如:
String str = "hello;world;how;\"are;you?\""
String[] strArray = str.split(/*some regex*/);
// strArray now contains: ["hello", "world", "how", "\"are you?\"]
\"
感谢任何帮助
答案 0 :(得分:4)
好的,这是一个适合你的代码:
String str = "a \"hello world;\";b \"hi there!\"";
String[] arr = str.split(";(?=(([^\"]*\"){2})*[^\"]*$)");
System.out.println(Arrays.toString(arr));
如果后面跟着偶数个双引号(这意味着;
在引号之外),这个正则表达式会找到一个分号。
<强>输出:强>
[a "hello world;", b "hi there!"]
PS:它不会处理像\"
答案 1 :(得分:0)
恢复这个问题,因为它有一个简单的正则表达式解决方案,没有提到。 (在为regex bounty quest进行一些研究时找到了您的问题。)
\"[^\"]*\"|(;)
交替的左侧匹配完整的引用字符串。我们将忽略这些匹配。右侧与第1组匹配并捕获分号,我们知道它们是正确的分号,因为它们与左侧的表达式不匹配。
以下是工作代码(请参阅online demo):
import java.util.*;
import java.io.*;
import java.util.regex.*;
import java.util.List;
class Program {
public static void main (String[] args) throws java.lang.Exception {
String subject = "hello;world;how;\"are;you?\"";
Pattern regex = Pattern.compile("\"[^\"]*\"|(;)");
Matcher m = regex.matcher(subject);
StringBuffer b= new StringBuffer();
while (m.find()) {
if(m.group(1) != null) m.appendReplacement(b, "SplitHere");
else m.appendReplacement(b, m.group(0));
}
m.appendTail(b);
String replaced = b.toString();
String[] splits = replaced.split("SplitHere");
for (String split : splits) System.out.println(split);
} // end main
} // end Program
参考