Scala、Spark、提取字符串的部分

Scala、Spark、提取字符串的部分,scala,apache-spark,Scala,Apache Spark,我试图提取字符串中与正则表达式匹配的部分。 我的字符串看起来像: 10001\u 20180101\u UPD\u文件1 它也可以看起来像: 10043_20180102_DEL_文件2 因此,我尝试使用以下代码提取部分内容: val pattern = "([0-9]+)_(\\d{4})(\\d{2})(\\d{2})_(UPD|DEL)_*".r val patern = splittet.map { case pattern(id, timestamp

我试图提取字符串中与正则表达式匹配的部分。 我的字符串看起来像: 10001\u 20180101\u UPD\u文件1

它也可以看起来像:

10043_20180102_DEL_文件2

因此,我尝试使用以下代码提取部分内容:

val pattern = "([0-9]+)_(\\d{4})(\\d{2})(\\d{2})_(UPD|DEL)_*".r
        val patern = splittet.map {
          case pattern(id, timestamp, typee, name) => "yes"
        }
        println(patern)
      }
val pattern = "([0-9]+)_([yyyy][mm][dd])_(UPD|DEL)_(FILE1)".r
 val pattern(id, timestamp, typee, name) = "10001 20180101 UPD FILE1"
或使用此代码:

val pattern = "([0-9]+)_(\\d{4})(\\d{2})(\\d{2})_(UPD|DEL)_*".r
        val patern = splittet.map {
          case pattern(id, timestamp, typee, name) => "yes"
        }
        println(patern)
      }
val pattern = "([0-9]+)_([yyyy][mm][dd])_(UPD|DEL)_(FILE1)".r
 val pattern(id, timestamp, typee, name) = "10001 20180101 UPD FILE1"
但我有一个问题:

18/07/17 14:34:17 WARN SparkContext: Using an existing SparkContext; some configuration may not take effect.
Exception in thread "main" scala.MatchError: 1 (of class java.lang.Character)

有人知道我做错了什么吗?

您的代码有几个问题。以下各项工作正常:

val pattern = raw"([0-9]+)_(\d{4})(\d{2})(\d{2})_(UPD|DEL)_(.*)".r

"10043_20180102_DEL_FILE2" match {
  case pattern(id, year, month, day, typee, name) => s"$id $year $month $day $typee $name "
  case _ => "No match"
}
您应该始终指定默认情况(
case\u=>“不匹配”
)以避免错误


你的正则表达式也有一些问题。如果要匹配名称,应在末尾添加组
(.*)
。另外,使用原始字符串编写更清晰的正则表达式

谢谢你的回答。它告诉我“不匹配”。。你知道为什么吗?你可能给了它一个不匹配的字符串。匹配仅适用于您定义的格式的字符串。看看这里:试试看。谢谢,我发现了我的错误!