java正则表达式删除csv中不需要的双引号

时间:2016-07-12 15:31:57

标签: java regex string csv

我有一个csv文件,其中包含以下行。如你所见,数字不用双引号括起来。

String theLine = "Corp:Industrial","5Nearest",51.93000000,"10:21:29","","","","10:21:29","7/5/2016","PER PHONE CALL WITH SAP, CORRECTING "C","359/317 97 SMRD 96.961 MADV",""

我尝试阅读以上行并使用regEX

进行拆分
String[] tokens = theLine.split(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))");

这并不像我想要的那样在每个逗号分开。 "每次拨打电话,使用SAP,更正" C",正在弄乱它,因为它有额外的,(逗号)和" (双引号)。可以请一些人帮我写一个正则表达式,它将逃避额外的双引号和逗号与两个双引号。

我基本上想要:

"Corp:Industrial","5Nearest",51.93000000,"10:21:29","","","","10:21:29","7/5/2016","**PER PHONE CALL WITH SAP CORRECTING C**","359/317 97 SMRD 96.961 MADV",""

1 个答案:

答案 0 :(得分:2)

有些工作解析器比正则表达式要好得多,而这类工作通常就是其中之一。我并不是说你不能让它适合你,但是......你也可以使用开源CSV解析器。

话虽如此,您的CSV看起来对我很怀疑。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    //....

        <android.support.design.widget.TextInputLayout
            android:id="@+id/input_layout_port"
            android:layout_width="150dp"
            android:layout_height="wrap_content"
            android:layout_marginTop="12dp"
            android:layout_below="@+id/defaultValue"
            android:paddingLeft="20dp"
            android:paddingRight="20dp"
            android:layout_centerHorizontal="true">

            <EditText
                android:id="@+id/input_port"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="Server Port"
                android:inputType="number"
                android:maxLength="5"
                android:nextFocusLeft="@id/input_port"
                android:nextFocusUp="@id/input_port"
                android:textAlignment="center"
                android:textStyle="bold" />

        </android.support.design.widget.TextInputLayout>

    //...
</RelativeLayout>

该值中有三个引号 - 是否表示内部只有一个引号的字符串?或者C应该用引号和字符串包围吗?

通常,如果您要在双引号中包含双引号,则需要使用特殊语法。对于CSV,最常见的选项是加倍,或者用反斜杠这样的字符转义它:

"PER PHONE CALL WITH SAP, CORRECTING "C",

或者:

"PER PHONE CALL WITH SAP, CORRECTING ""C""",

这些都不会直接改变你使用正则表达式的问题,但是一旦你有一个格式正确的CSV,你成功解析它的几率就会上升。