【问题标题】:Regex split string in double quotes双引号中的正则表达式拆分字符串
【发布时间】:2021-11-14 21:12:33
【问题描述】:

我有以下字符串需要用双引号分隔。下面是示例字符串

String raw = "\"AKINWALE JOHNSON ROTIMI                                \"   \"100000072      \"       \"1985"
                + "0217                         \"  \"                                                                                \"      \"0250000066               \""
                + "\"                                                         08035558619\"  \"22324902758    \"       \"NG0250002    \" \"9113985      \"";

当我尝试用双引号分割字符串时,知道有些引号可以为空

我尝试了以下方法: String[] split = raw.split("\"(\\w\\s+|\\s+)\"");

它很接近,但我似乎错过了一些东西。

【问题讨论】:

  • 请包括您的预期输出?
  • 也许您想在"s 对之间获取所有信息?喜欢ideone.com/xkmjrY

标签: java regex split


【解决方案1】:

您可以简单地将其拆分为 \\s*\"\\s*,这意味着 " 前面或后面跟零个或多个空白字符。

演示:

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        String raw = "\"AKINWALE JOHNSON ROTIMI                                \"   \"100000072      \"       \"1985"
                + "0217                         \"  \"                                                                                \"      \"0250000066               \""
                + "\"                                                         08035558619\"  \"22324902758    \"       \"NG0250002    \" \"9113985      \"";

        String[] split = raw.split("\\s*\"\\s*");
        Arrays.stream(split).forEach(System.out::println);
    }
}

输出:

AKINWALE JOHNSON ROTIMI

100000072

19850217



0250000066

08035558619

22324902758

NG0250002

9113985

ONLINE DEMO

【讨论】:

  • 如果我们可以进一步缩小范围,您的解决方案会给出一个大小为 18 的数组,我期望为 9,这意味着如果我从数组中删除了所有空字符串,我将离开8,这意味着我期望的原始字符串中的一个值是一个空字符串。我仍然可以使用正则表达式执行此操作,还是仅循环遍历正则表达式的输出并删除所有索引为偶数的索引?
  • @DaviesTobialex - 您可以使用String[] split = Arrays.stream(raw.split("\\s*\"\\s*")).filter(s -> !s.isEmpty()).toArray(String[]::new); 获取没有空字符串的数组。
  • 如果你想保留引号内只包含空格的行,你可以使用String[] split = Pattern.compile("\"[^\"]*\"|\\S+") .matcher(raw) .results() .map(MatchResult::group) .map(s->s.replace("\"","")) .toArray(String[]::new);
  • 这不是默认的java.util.regex.Pattern 是吗?
  • 是的。请查看this
猜你喜欢
  • 1970-01-01
  • 2016-08-20
  • 2020-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多