[英]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.