我正在尝试使用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;
答案 0 :(得分:3)
使用Lookahead和Lookbehind
您可以使用此正则表达式:
(?<=\()\d+\.\d+,\d+\.\d+(?=\))
或者,如果括号内不需要精度:
(?<=\()[^)]+(?=\))
<强>解释强>
(?<=\()
声称前面的是(
\d+\.\d+,\d+\.\d+
匹配字符串[^)]+
匹配任何不是右括号的字符(?=\))
声称后面的内容是)
<强>参考强>
答案 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)
答案 3 :(得分:-1)
\((.*?)\)
有效 - 您只需要提取匹配的组。最简单的方法是使用unapplySeq
的{{1}}方法:
scala.util.matching.Regex