在下面的代码中,使用Java API时相同的模式匹配,但使用Scala模式匹配时不匹配。 import java.util.regex.Pattern
object Main extends App {
val text = "/oAuth.html?state=abcde&code=hfjksdhfrufhjjfkdjfkds"
val statePatternString = """\/.*\?.*state=([^&\?]*)"""
val statePattern = statePatte
请参阅以下DFA
通过JFLAP创建。当我转换为regex时,JFLAP给出:
p+(q+pq)(pq)*(λ+p)
当我将它粘贴到Scala中时:
scala> val regex = "p+(q+pq)(pq)*(+p)".r
java.util.regex.PatternSyntaxException: Dangling meta character '+' near index 14
p+(q+pq)(pq)*(+p)
^
at java.util.regex.Pattern.error
我在使用正则表达式方面有困难。我的样本数据是:
12 13 hello hiiii hhhhh
this doesnt have numeric so should be removed
Even this line should be excluded
`12` this line contains numeric shouldn't exclude
Hope even this line should be excluded
scala> val pattern = "[a-z][A-Z]".r
我想在Scala中读一个名为:monthlyPurchaseFile{202205}-May.TXT的文件
我使用的代码如下:
val df = spark.read.text("handel_special_ch/monthlyPurchaseFile{202205}-May.TXT"
但我不例外:
org.apache.spark.sql.AnalysisException: Path does not exist: file:/home/hdp_batch_datalake_dev/handel_special_ch/monthlyPurchaseFile{202205}
为什么同一匹配者的匹配行为是不同的?
val str = "project git commit: da2837ec0a"
val Expr = "([a-f0-9]{10})$".r
scala> str match { case Pattern(c) => c; case _ => "no match" }
res30: String = no match
scala> (Pattern findFirstIn str).get
res31: String = da2837ec0a
我试图在Scala2.11.8中提取url的主机名。由于某些原因,模式匹配方法不起作用,我不知道为什么:
val HOSTNAME = "^http[s]:\\/?\\/?([^:\\/\\s]+)".r
val text = "https://foo-bar.hostname.com/"
// evaluates to None
val host: Option[String] = {
text match {
case HOSTNAME(h) => Some(h)
case _ =>
None
}
}
//
为什么这里有匹配:
scala> """\bdog\b""".r
res65: scala.util.matching.Regex = \bdog\b
scala> res65.findFirstIn(" The dog plays in the yard")
res66: Option[String] = Some(dog)
但不是这里:
scala> "The dog plays in the yard".matches("""\bdog\b"""
我有这个冗长的代码,可以在Scala中进行短路Regex提取/匹配。这将尝试将字符串与第一个Regex匹配,如果不匹配,则尝试将字符串与第二个Regex匹配。
val regex1 : scala.util.matching.Regex = "^a(b)".r
val regex2 : scala.util.matching.Regex = "^c(d)".r
val s = ?
val extractedGroup1 : Option[String] = s match { case regex1(v) => Some(v) case _ =>
我正在尝试对一个列执行一些正则表达式操作。为了做到这一点,我用如下的基本小写操作进行了说明:
df.select('name').map(lambda x: x.lower())
这里的df是一个DataFrame,当我调用collect()操作时,该操作抛出了一个异常。
Ques 1: After map(or reduce) operation, every DataFrame converts to a Pipelined RDD. Am I right?
如果是这样,为什么这个命令在收集流水线RDD时抛出异常。
我错过了什么吗?
异常太大,无法读取:
17/07
以下是我的REPL输出。我不确定为什么string.split不能在这里工作。
val s = "Pedro|groceries|apple|1.42"
s: java.lang.String = Pedro|groceries|apple|1.42
scala> s.split("|")
res27: Array[java.lang.String] = Array("", P, e, d, r, o, |, g, r, o, c, e, r, i, e, s, |, a, p, p, l, e, |, 1, ., 4, 2)
晚上好斯塔克溢流
我被困在一个不能让Scala匹配的地方,这是我的代码
private def handle_read(packet: TFTPReadRequestPacket, tftp_io: TFTP): Unit = {
val MAC_REGEX = "([0-9A-F]{2}[:-]){5}([0-9A-F]{2})".r
packet.getFilename match {
case MAC_REGEX(a) => println(s"Client is coming from $a")
}
}
有没有办法用Scala的Regex库返回两个字符串之间不匹配字符串的第一个实例?
例如:
val a = "some text abc123 some more text"
val b = "some text xyz some more text"
a.firstUnmatched(b) = "abc123"