我的程序是:
val pattern = "[*]prefix_([a-zA-Z]*)_[*]".r
val outputFieldMod = "TRASHprefix_target_TRASH"
var tar =
outputFieldMod match {
case pattern(target) => target
}
println(tar)
基本上,我尝试获取“目标”并忽略“TRASH”(我使用了*)。但它有一些错误,我不知道为什么..
最佳答案
简单直接的标准库函数(未锚定)
使用非锚定
解决方案一
在模式上使用unanchored
来匹配字符串内部,忽略垃圾
val pattern = "prefix_([a-zA-Z]*)_".r.unanchored
unanchored
将仅匹配忽略所有垃圾(所有其他单词)的模式
val result = str match {
case pattern(value) => value
case _ => ""
}
示例
Scala REPL
scala> val pattern = """foo\((.*)\)""".r.unanchored
pattern: scala.util.matching.UnanchoredRegex = foo\((.*)\)
scala> val str = "blahblahfoo(bar)blahblah"
str: String = blahblahfoo(bar)blahblah
scala> str match { case pattern(value) => value ; case _ => "no match" }
res3: String = bar
解决方案二
用.*
从两侧填充图案。 .*
匹配除换行符之外的任何字符。
val pattern = ".*prefix_([a-zA-Z]*)_.*".r
val result = str match {
case pattern(value) => value
case _ => ""
}
示例
Scala REPL
scala> val pattern = """.*foo\((.*)\).*""".r
pattern: scala.util.matching.Regex = .*foo\((.*)\).*
scala> val str = "blahblahfoo(bar)blahblah"
str: String = blahblahfoo(bar)blahblah
scala> str match { case pattern(value) => value ; case _ => "no match" }
res4: String = bar
关于regex - Scala,正则表达式匹配忽略不必要的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40321243/