使用正则表达式的 Scala 捕获组
假设我有以下代码:
val string = "one493two483three"
val pattern = """two(\d+)three""".r
pattern.findAllIn(string).foreach(println)
我期望 findAllIn
仅返回 483
,但它返回了 two483third
。我知道我可以使用 unapply
来仅提取该部分,但我必须为整个字符串提供一个模式,例如:
val pattern = """one.*two(\d+)three""".r
val pattern(aMatch) = string
println(aMatch) // prints 483
是否有另一种方法可以实现此目的,而不使用 < 中的类code>java.util 直接,而不使用 unapp?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
以下是如何访问每场比赛的
group(1)
的示例:这会打印
"483"
(如 ideone.com 上所见)。环视选项
根据模式的复杂性,您还可以使用环视来仅匹配您想要的部分。它看起来像这样:
上面还打印
"483"
(如 ideone.com 上所示)。参考文献
Here's an example of how you can access
group(1)
of each match:This prints
"483"
(as seen on ideone.com).The lookaround option
Depending on the complexity of the pattern, you can also use lookarounds to only match the portion you want. It'll look something like this:
The above also prints
"483"
(as seen on ideone.com).References
从 Scala 2.13 开始,作为正则表达式解决方案的替代方案,还可以通过 取消应用字符串插值器:
甚至:
如果您期望不匹配的输入,您可以添加默认模式保护:
Starting
Scala 2.13
, as an alternative to regex solutions, it's also possible to pattern match aString
by unapplying a string interpolator:Or even:
If you expect non matching input, you can add a default pattern guard:
您想要查看
group(1)
,当前正在查看group(0)
,它是“整个匹配的字符串”。请参阅此正则表达式教程。
You want to look at
group(1)
, you're currently looking atgroup(0)
, which is "the entire matched string".See this regex tutorial.