我有一个文本文件,如下所示:
"0","Column","column2","Column3"
我设法将数据分解为以下内容:
"0"
"Column"
"Column2"
"Column3"
使用,(?=(?:[^']*'[^']*')*[^']*$)
,现在我想删除引号。我已经在线上的正则表达式测试器测试了表达式[^\s"']+|"([^"]*)"|\'([^\']*)
,它给出了我所寻找的正确输出。但是,使用表达式时出现语法错误:
String[] columns = Regex.Split(dataLine, "[^\s"']+|"([^"]*)"|\'([^\']*)");
语法错误','预计
我尝试了转义字符,但无济于事,我错过了什么吗?
任何帮助将不胜感激!
谢谢。
答案 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