2016-04-06 2 views
-2

я придумал рисунок как val pattern = "(\\w+)\\|(.*)\\|\\[(.*)\\]\\|\"(.*)\"\\|\"(.*)\"\\|\\[(.*)\\]\\|\\[(.*)\\]\\|(.*)\\|\\[(.*)\\]\\|\\[(.*)\\]".rкак разделить SCALA строку с регулярным выражением

и у меня есть оригинальная строка

var str = """AuthLogout|vmlxapp21a|[13/Jan/2016:16:33:15 +0100]|"66.77.444.44 uid=XXXXX,ou=People,o=Bank,o=External,dc=xxxx,dc=com"|"abcd_123_portalweb_w "|[]|[41]||[]|[]""" 

затем применить шаблон к строке, но это всегда пусто.

val items = pattern.findAllIn(str).toList

+0

не избежать «\» скобки '[]' и 'ПРС | '. –

ответ

2

Если я понимаю, что вы пытаетесь сделать, возможно, с помощью гигантского регулярное выражение не самый простой способ: Вы можете split от | и избавиться от нежелательных сепараторов ([, ], ") с помощью replaceAll:

val str = """AuthLogout|vmlxapp21a|[13/Jan/2016:16:33:15 +0100]|"66.77.444.44 uid=XXXXX,ou=People,o=Bank,o=External,dc=xxxx,dc=com"|"abcd_123_portalweb_w "|[]|[41]||[]|[]""" 
val withoutBoundaries = str.replaceAll("[\"\\]\\[]","") 
val result = withoutBoundaries.split("\\|") 
result.foreach(println) 

который печатает:

AuthLogout 
vmlxapp21a 
13/Jan/2016:16:33:15 +0100 
66.77.444.44 uid=XXXXX,ou=People,o=Bank,o=External,dc=xxxx,dc=com 
abcd_123_portalweb_w 

41 

Если вы сделать хотите использовать регулярное выражение здесь, я бы создать суб-регулярное выражение VARS представляющих различные части текста, что вы после этого, чтобы сделать это несколько управляемо:

val plain = "(.*)"    // no boundary characters 
val boxed = s"\\[$plain\\]"  // same, encapsulated by square brackets 
val quoted = '"' + plain + '"' // same, encapsulated by double quotes 

// the whole thing, separated by pipes: 
val r = s"$plain\\|$plain\\|$boxed\\|$quoted\\|$quoted\\|$boxed\\|$boxed\\|$plain\\|$boxed\\|$boxed".r 

val result = r.findAllIn(str).toList // this list has one item, as expected. 

Теперь, если вы хотят, чтобы увидеть, как это регулярное выражение выглядит, вот она, - но я не рекомендую иметь это в вашем коде ...:

val r = """(.*)\|(.*)\|\[(.*)\]\|"(.*)"\|"(.*)"\|\[(.*)\]\|\[(.*)\]\|(.*)\|\[(.*)\]\|\[(.*)\]""".r 
Смежные вопросы