用于将字符串转换为元组的正则表达式

时间:2017-06-23 10:47:55

标签: regex string scala

我有一个字符串,需要将其转换为scala中的Tuple2。字符串是:

("abc",1),("def",9),("ghi",7)...

我尝试采用的方法是使用正则表达式将字符串拆分为("abc",1)("def",9)("ghi",7),然后创建相应的元组。但是我无法想到会分裂字符串的正则表达式。我试过[)][,][(],但没有透露正确的结果。

OR可能有更好的方法从没有正则表达式的字符串创建元组?

2 个答案:

答案 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));
}

我相信这会完成这项工作