C#正则表达式拆分引号和逗号语法错误

时间:2018-10-08 22:18:35

标签: c# asp.net regex

我有一个文本文件,如下所示:

"0","Column","column2","Column3"

我设法将数据分解为以下内容:

"0"
"Column"
"Column2"
"Column3"

使用,(?=(?:[^']*'[^']*')*[^']*$),现在我想删除引号。我已经在线上的正则表达式测试器测试了表达式[^\s"']+|"([^"]*)"|\'([^\']*),它给出了我所寻找的正确输出。但是,使用表达式时出现语法错误:

String[] columns = Regex.Split(dataLine, "[^\s"']+|"([^"]*)"|\'([^\']*)");
  

语法错误','预计

我尝试了转义字符,但无济于事,我错过了什么吗?

任何帮助将不胜感激!

谢谢。

3 个答案:

答案 0 :(得分:1)

C#可能在转义反斜杠。试试:

Edit

答案 1 :(得分:0)

问题在于正则表达式中的双引号,编译器对此感到扼制,认为它们是字符串的结尾。 您必须像这样逃避它们:

val spark = SparkSession
  .builder()
  .appName("Spark SQL json example")
  .master("local[1]")
  .getOrCreate()
import spark.implicits._
val df = spark.read.json
val schema = df.schema
val columns = df.columns // enough for flat tables

val dataframe2 = df.withColumn("MissingString1", lit(null).cast(StringType) ) .withColumn("MissingString2", lit(null).cast(StringType) ) .withColumn("MissingDouble1", lit(0.0).cast(DoubleType) )

您实际上可以使用一个正则表达式来完成所有您想做的事情,而无需先拆分:

withColumns()

这里我使用@引号的字符串,其中双引号被双引而不是转义。

正则表达式使用后向查找双引号,然后匹配除逗号'以外的任何字符,零回零,然后再向前查找双引号。

使用方法

"[^\s\"']+|\"([^\"]*)\"|\'([^\']*)"

答案 2 :(得分:0)

您需要在正则表达式中转义双引号,因为它们会关闭字符串文字。另外,要处理“无法识别的转义序列”,您需要对\中的\s进行转义。

执行此操作的两种方法:

  • 使用反斜杠转义所有要关注的字符:"[^\\s\"']+|\"([^\"]*)\"|\'([^\']*)"
  • 使用@语法表示“ verbatim”字符串文字。仍然需要对双引号进行转义,但要对每个""使用"@"[^\s""']+|""([^""]*)""|'([^']*)"

无论如何,当我测试您的新正则表达式时,它似乎也正在捕获一些空组,请参见:https://dotnetfiddle.net/1WQE4R