如何匹配scala正则表达式中括号的内容

时间:2014-07-03 23:52:29

标签: regex scala

我正在尝试使用scala正则表达式获取类似此(2.2,3.4)的字符串的内容,以获取类似于以下2.2,3.4的字符串

这将为我提供 括号的字符串以及所有来自其他文字的字符串:

"""\(.*?\)"""

但我似乎无法找到获得括号内容的方法。

我尝试过:"""\((.*?)\)""" """((.*?))"""和其他一些组合,没有运气。

我过去在其他Java应用程序中使用过这个:\\((.*?)\\),这就是为什么我认为上面"""\((.*?)\)"""行中的第一次尝试可行。

就我的目的而言,这看起来像是:

var points = "pointA: (2.12, -3.48), pointB: (2.12, -3.48)"
var parenth_contents = """\((.*?)\)""".r;
val center = parenth_contents.findAllIn(points(0));
var cxy = center.next();   
val cx = cxy.split(",")(0).toDouble;

4 个答案:

答案 0 :(得分:3)

使用Lookahead和Lookbehind

您可以使用此正则表达式:

(?<=\()\d+\.\d+,\d+\.\d+(?=\))

或者,如果括号内不需要精度:

(?<=\()[^)]+(?=\))

请参阅demo 1demo 2

<强>解释

  • lookbehind (?<=\()声称前面的是(
  • \d+\.\d+,\d+\.\d+匹配字符串
  • 或者,在选项2中,[^)]+匹配任何不是右括号的字符
  • 前瞻(?=\))声称后面的内容是)

<强>参考

答案 1 :(得分:0)

可以尝试一下

val parenth_contents = "\\(([^)]+)\\)".r
parenth_contents: scala.util.matching.Regex = \(([^)]+)\)

val parenth_contents(r) = "(123, abc)"
r: String = 123, abc

答案 2 :(得分:0)

一个偶数样本正则表达式,用于匹配括号内的所有出现以及括号内的内容。

(\([^)]+\)+)

1st Capturing Group (\([^)]+\)+)
\( matches the character ( literally (case sensitive)
Match a single character not present in the list below [^)]+
+ Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)
) matches the character ) literally (case sensitive)
\)+ matches the character ) literally (case sensitive)
+ Quantifier — Matches between one and unlimited times, as many times as possible, giving back as needed (greedy)
Global pattern flags
g modifier: global. All matches (don't return after first match)
m modifier: multi line. Causes ^ and $ to match the begin/end of each line (not only begin/end of string)

https://regex101.com/r/MMNRRo/1

答案 3 :(得分:-1)

\((.*?)\)有效 - 您只需要提取匹配的组。最简单的方法是使用unapplySeq的{​​{1}}方法:

scala.util.matching.Regex