String Scala regex从字符串中提取属性和关联值
考虑枚举属性名称并后跟赋值的字符串,例如String Scala regex从字符串中提取属性和关联值,string,scala,String,Scala,考虑枚举属性名称并后跟赋值的字符串,例如 val s = """id=id1,desc="a description, details",location="a location"""" 其中,每个属性值可能包括带逗号的带引号的字符串 例如,如何将每个属性值提取到 case class Row(id: String, location: String, desc: String) 首先,在引号外的逗号上拆分,然后在等号上拆分 val split_str = s.split(""",(?=([
val s = """id=id1,desc="a description, details",location="a location""""
其中,每个属性值可能包括带逗号的带引号的字符串
例如,如何将每个属性值提取到
case class Row(id: String, location: String, desc: String)
首先,在引号外的逗号上拆分,然后在等号上拆分
val split_str = s.split(""",(?=([^"]*"[^"]*")*[^"]*$)""").map(_.split("=").last)
这将为您提供所需字符串的数组:
Array(id1, "a description, details", "a location")
如果要删除这些字符串上的引号,只需在last
之后添加。替换(“\”,“”)
。然后只需创建类:
Row(split_str(0), split_str(2), split_str(1))
向我们展示您的尝试。@revo我的第一次尝试包括
s.split(“,”
(由于内部字符串中的逗号而不健全)和s.split(“=”)
,这使得值和属性ID的关联变得很困难…如果您在,?[^=,]处拆分会怎么样+=
?如何从这个正则表达式中获取案例类行的实例?@elm:在回答中添加了这样一点:您的模式在所有逗号上都被拆分。结果数组有4个元素。@jwvh:模式中的引号类型错误,感谢您的注意。它现在应该可以工作了。前瞻?=
已经无法捕获,所以我不认为?:
完成任何事情。