2013-06-03 29 views
6

Bu bölünmüş satırı bulduğum belirli bir Scala kodunda sorun yaşıyorum. Yalnızca şu satırları kullanmadan önce:Scala'daki bu bölünmüş hat ne anlama geliyor?

var newLine = line.split(",") 

Ancak bu bölüm ne anlama geliyor?

var newLine2 = line.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)") 

Ben bölmek gerek çizgi şuna benzer:

1966, "Green, Green Grass of Home", Tom Jones, 850000 

peşin!

+1

Bildiri sözdizimi 'val name = expression' dışında, bu bir Scala değil. 'Split' yöntemi java.lang.String'de tanımlanmıştır: http://docs.oracle.com/javase/6/docs/api/java/lang/String.html#split(java.lang.String) –

cevap

11

için http://en.wikipedia.org/wiki/Regular_expression bkz. (?=([^\"]*\"[^\"]*\")*[^\"]*$) grubu positive lookahead assertion'dur. Bu, virgülle bölünmek anlamına gelir, ancak yalnızca ([^\"]*\"[^\"]*\")*[^\"]*$ modeli virgülü takip ediyorsa. virgül çift tırnak içinde değil bölünmüş yalnızca, başka bir deyişle bu yüzden, virgül aşağıdaki çift tırnak eşit miktarda olduğunda, sadece virgül bölünmüş anlamına gelir

([^\"]*  # a series of non double quote characters 
    \"  # a double quote 
    [^\"]* # a series of non double quote characters 
\")   # a double quote 
*   # repeat that whole group 0 or more times 
[^\"]*$  # a series of non double quote characters till the end of the string 

. (Bu, dize içinde yalnızca çift tırnak işaretleri olduğu sürece çalışacaktır.)

+0

hızlı ve yardımsever cevabınız için teşekkürler! :) şimdi bir anlam kazandı. – amko23

2

Bu normal ifade ("RegEx") 'dir, bir açıklama bölünmüş yöntem içinde dizesi regular expression tanımlar

+0

tamam teşekkür ederim :) – amko23