斯卡拉正则表达式

时间:2014-11-13 23:47:28

标签: regex scala

我在使这个正则表达式恰到好处时遇到了一些麻烦:

示例字符串如下所示:

"li3001easdasfsaasfasdi5ei1409529297ei1409529597ed16:acl_dec_tag_listl15:DEFAULT_CASE_11e18:avc_app_name_statsd29:Generic Search Engine Trafficd4:sizei5875e5:totali5ee16:Odnoklassniki.Rud4:sizei456e5:totali1ee7:Unknownd4:sizei6391e5:totali2ee5:Yahood4:sizei15673e5:totali1ee10:Yahoo Maild4:sizei5982e5:totali1e"

我希望字符串分组如下:

(li<digit 1-4>e <string of varying length> i<single digit>e) (<string2 of varying length>)

到目前为止,这是我对此正则表达式的尝试:(li\d{1,}e.*i\de)(.*)

我只希望第一次出现li<digits 1-4>e

2 个答案:

答案 0 :(得分:1)

简单的错误。 *greedy运算符,意味着它将尽可能多地匹配,并且仍允许正则表达式的其余部分匹配。使用*?代替非贪婪的匹配意义&#34;零或更多 - 最好尽可能少&#34;。

(li\d{1,}e.*?i\de)(.*)

答案 1 :(得分:0)

val s = "li3001easdasfsaasfasdi5easdasfsafas"
val p = """li(\d{1,4})e([^i]*)i(\d)(.*)""".r
val p(first,second,third,fourth) = s

结果:

first: String = 3001
second: String = asdasfsaasfasd
third: String = 5
fourth: String = easdasfsafas

不确定这是否能回答您的问题,但希望有所帮助。