R:strsplit中的正则表达式(找到“,”后跟大写字母)

时间:2015-11-17 14:38:32

标签: regex r strsplit

假设我有一个包含一些我希望根据正则表达式拆分的字符的向量。

更确切地说,我想基于逗号分隔字符串,然后是空格,然后是大写字母(根据我的理解,regex命令如下所示:{{1} }(当我尝试here时)工作正常。)。

当我尝试在/(, [A-Z])/g中实现此目的时,r似乎不起作用,例如:

regex

它找不到分裂。我在这里做错了什么?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:8)

这是一个解决方案:

 private void saveTrace() {
    try {
        Log.d(mapsActivity.TAGDEBUG, "Sauvegarde de la trace automatique");
        Log.d(mapsActivity.TAGDEBUG, "Nombre de point compris dans la trace automatique: " + String.valueOf(listBeanTraceUser.size()));
        String sFileNameTrace = "trace_" + currentDate + ".xml";
        File traceFile = new File(root, sFileNameTrace);

        MediaScannerConnection.scanFile(mapsActivity, new String[]{traceFile.getAbsolutePath()}, null, null);

        FileWriter writer = new FileWriter(traceFile);
        BufferedWriter out = new BufferedWriter(writer, 32768);
        String jsonStringTrace = gson.toJson(listBeanTraceUser);
        Log.d(mapsActivity.TAGDEBUG, "lenght jsonStringTrace : " + String.valueOf(jsonStringTrace.length()));
        out.write(jsonStringTrace);
        out.close();
    } catch (Exception e) {
        Log.d(mapsActivity.TAGDEBUG, "Erreur lors de la Sauvegarde de la trace automatique");
        e.printStackTrace();
    }
}

请参阅IDEONE demo

输出:

strsplit(x, ", (?=[A-Z])", perl=T)

正则表达式 - [[1]] [1] "Non MMF investment funds" [2] "Insurance corporations" [3] "Assets (Net Acquisition of)" [4] "Loans" [5] "Long-term original maturity (over 1 year or no stated maturity)" [[2]] [1] "Non financial corporations" [2] "Financial corporations other than MFIs, insurance corporations, pension funds and non-MMF investment funds" [3] "Assets (Net Acquisition of)" [4] "Loans" [5] "Short-term original maturity (up to 1 year)" - 包含一个前瞻", (?=[A-Z])",它会检查但不会使用大写字母。在R中,您需要将(?=[A-Z])与包含外观的正则表达式一起使用。

如果空格是可选的,或者逗号和大写字母之间可以有双倍空格,请使用

perl=T

还有一个支持Unicode字母的变体(带strsplit(x, ",\\s*(?=[A-Z])", perl=T) ):

\\p{Lu}