我有一个字符串,需要将其转换为scala中的Tuple2。字符串是:
("abc",1),("def",9),("ghi",7)...
我尝试采用的方法是使用正则表达式将字符串拆分为("abc",1)
,("def",9)
和("ghi",7)
,然后创建相应的元组。但是我无法想到会分裂字符串的正则表达式。我试过[)][,][(]
,但没有透露正确的结果。
OR可能有更好的方法从没有正则表达式的字符串创建元组?
答案 0 :(得分:2)
如果您的字符串始终采用您显示的格式,则可以使用简化substring
删除第一个和最后一个括号,然后使用)
和,
进行拆分。然后是(
。
请参阅Scala demo:
val s = """("abc",1),("def",9),("ghi",7)"""
val res = s.substring(1, s.length-1).split("""\)\s*,\s*\(""")
res.foreach { l => println(l) }
打印:
"abc",1
"def",9
"ghi",7
模式详情:
\)
- 文字)
\s*
- 0+ whitespaces ,
- 逗号\s*
- 0+ whitespaces \(
- 文字(
。由于三引号字符串文字用于定义正则表达式,因此单个反斜杠表示文字反斜杠,不需要加倍。
答案 1 :(得分:0)
如果是C#,你可以这样做:
MatchCollection matches = Regex.Matches(input, @"\(""(?<string>[^""]*)"",(?<number>\d+)\)");
foreach(Match match in matches)
{
yield return new Tuple<string, int>(match.Groups["string"].Value, int.Parse(match.Groups["number"].Value));
}
我相信这会完成这项工作