在双引号上拆分字符串的正则表达式只保留引号之间的内容

时间:2014-08-11 14:37:42

标签: java regex string split

对不准确的标题感到抱歉,但我不知道怎么说。

如果我的字符串看起来像这样:

1+"."+2+"abc"+3+","+12+"."

我希望得到一个只包含"引号"

之间内容的数组
.
abc
,
.

我想收到上面的数组。

我怎样才能做到这一点?

注意:所有值都是随机的,只有双引号是确定的。

示例:字符串也可以如下所示:

23412+"11"+244+"11"+abc+"11"
result should be:
11
11
11

abc+"abc"+abcd+"abcd"
result should be:
abc
abcd

1+"."+2+"."+"."+"3"
result should be:
.
.
.

我希望你能提供帮助。

4 个答案:

答案 0 :(得分:5)

匹配而不是拆分:

"([^\"]+)"

RegEx Demo

答案 1 :(得分:1)

使用此正则表达式:

public static void main(String[] args) {
    String s = "23412+\"11\"+244+\"11\"+abc+\"11\"\"abcd\"pqrs";
    Pattern p = Pattern.compile("\"(.*?)\""); \\ lazy quantifier
    Matcher m = p.matcher(s);
    while (m.find()) {
        System.out.println(m.group(1));
    }
}

O / P:

11
11
11
abcd

答案 2 :(得分:0)

我知道你想要正则表达式,但是如果你也可以在没有正则表达式的情况下做到这一点:

public static void main(String[] args) {
        String yourString = "23412+\"11\"+244+\"11\"+abc+\"11\"";
        String result = "";
        String[] splitted = yourString.split("\"");
        if (splitted.length > 0) {
            for (int i = 1; i < splitted.length; i += 2) {
                result += splitted[i] + System.lineSeparator();
            }
            result = result.trim();
        }
        System.out.println(result);
    }

您可以将StringBuilder用于长字符串。

答案 3 :(得分:0)

我认为编写一个方法并将其用作程序中的实用程序非常简单......这是一个例子:

import java.util.ArrayList;


public class Test
{
    public static void main(String[] args)
    {
        String str = "23412+\"11\"+244+\"11\"+abc+\"11\"\"abcd\"pqrs";
        int i=0;
        ArrayList<String> strList = new ArrayList<String>();
        while (i<str.length())
        {
            if(str.charAt(i) == '\"')
            {
                int temp = i;
                do
                {
                    i++;
                }
                while (str.charAt(i) != '\"');

                strList.add(str.substring(temp+1, i));
            }
            i++;
        }
        for(int j=0; j<strList.size(); j++)
        {
            System.out.println(strList.get(j));
        }
    }
}

你可以改变它来返回ArrayList而不是打印它然后你有完美的工具来完成这项工作