簡體   English   中英

如何讓scala字符串拆分以匹配python

[英]how to get scala string split to match python

我正在使用spark-shell和pyspark對一篇文章進行字數統計。 line.split(“”)和python split()上的scala flatmap獲得不同的字數(scala有更多)。 我在scala代碼中嘗試了split(“+”)和split(“\\ W +”),但無法將計數歸結為與python相同。

有誰知道什么模式會完全匹配python?

Python的str.split()對默認分隔符有一些特殊的行為:

連續空格的運行被視為單個分隔符,如果字符串具有前導或尾隨空格,則結果將在開頭或結尾處不包含空字符串。 因此,將空字符串或僅由空格組成的字符串拆分為None分隔符將返回[]

例如, ' 1 2 3 '.split()返回['1', '2', '3']

在Scala中完全匹配它的最簡單方法可能是這樣的:

scala> """\S+""".r.findAllIn(" 1  2   3  ").toList
res0: List[String] = List(1, 2, 3)

scala> """\S+""".r.findAllIn("   ").toList
res1: List[String] = List()

scala> """\S+""".r.findAllIn("").toList
res2: List[String] = List()

另一種方法是事先trim()字符串:

scala> " 1  2   3  ".trim().split("""\s+""")
res3: Array[String] = Array(1, 2, 3)

但是對於空字符串,它與Python沒有相同的行為:

scala> "".trim().split("""\s+""")
res4: Array[String] = Array("")

在Scala中,空字符串的split()返回一個包含一個元素的數組,但在Python中,結果是一個元素的列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM