regex - Scala,正则表达式匹配忽略不必要的单词

标签 regex scala

我的程序是:

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/

相关文章:

java - 正则表达式静态组问题

Java 和正则表达式中的后视

validation - Scala 2.10 中验证和扩展构造函数参数的最佳方法

IntelliJ 的 Scala 风格指南格式化程序

JavaCC - 匹配除其他一些单词之外的一些单词

javascript - 使用正则表达式的名称验证

scala - 在withColumn函数下使用匿名函数在Scala中单撇号(')的符号的含义?

Scala Return 语句行为

正则表达式 findall 根据开始和结束字符检索子字符串

scala - 使用 Akka 进行依赖注入(inject)