获取双引号内的字符串以及字符串的其余部分

Get string within double quotes along with rest of the string

我有一种情况需要在一个变量中提取双引号内的字符串,在另一个变量中提取字符串的其余部分。

两种可能性:

字符串: "Franklin B" Benjamin

结果:

var1 = Franklin B
var2 = Benjamin

字符串: Benjamin "Franklin B"

结果:

var1 = Benjamin
var2 = Franklin B

Regex/Without 正则表达式;我对任何方法都持开放态度。

一个简单的非正则表达式方法:

public static String[] split(String input) {
    if (input.charAt(0) == '"') {
        return input.substring(1).split("\" ");
    } else {
        return input.substring(0, input.length() - 1).split(" \"");
    }
}

首先检查第一个字符是否为"。然后从开头或结尾删除引号并简单地将其拆分。

以下将为您提供包含所需值的列表:

private List<String> getValues(String input) {
        List<String> matchList = new ArrayList<>();
        Pattern regex = Pattern.compile("[^\s\"']+|\"[^\"]*\"|'[^']*'");
        Matcher regexMatcher = regex.matcher(input);
        while (regexMatcher.find()) {
            matchList.add(regexMatcher.group());
        }
        return matchList;
    }

取自Regex for splitting a string using space when not surrounded by single or double quotes

试试这个...

基本上,您在执行拆分之前删除字符串中的任何前导分隔符。这样您就不必担心前导空元素。

public static void main(String[] args) {
    String testString = "\"Franklin B\" Benjamin";
    String testString2 = "Benjamin \"Franklin B\"";

    displaySplitResults(mySplit(testString, "\""));
    displaySplitResults(mySplit(testString2, "\""));
}

private static String[] mySplit(final String input, final String delim)
{
    return input.replaceFirst("^" + delim, "").split(delim);
}

private static void displaySplitResults(String[] splitResults) {
    if (splitResults.length == 2) {
        String var1 = splitResults[0].trim();
        String var2 = splitResults[1].trim();

        System.out.println(var1);
        System.out.println(var2);
    }        
}

结果:

Franklin B
Benjamin
Benjamin
Franklin B

@Shar1er80 没有正则表达式的好作品。效果很好。

我也尝试过正则表达式:

//使用正则表达式获取由空格分隔但用双引号引起来的值

RegexOptions options = RegexOptions.None;
Regex regex = new Regex( @"((""((?<token>.*?)(?<!\)"")|(?<token>[\w]+))(\s)*)", options );

string input = @"   Here is ""my string"" it has   "" six  matches""   ";
var result = (from Match m in regex.Matches( input ) 
              where m.Groups[ "token" ].Success
              select m.Groups[ "token" ].Value).ToList();

给我确切的结果。