在scala中使用正则表达式提取字符串

时间:2017-04-23 00:20:52

标签: regex scala

我有一个用例,我想从scala中的输入中提取某些字符串。

我的输入字符串类似于:

asdwf:"ssdf", as232:"ss",ABC:"xxx",sdfsf234:"sdaf"

我想在xxx之后提取ABC

我尝试定义正则表达式匹配模式:
val Pattern = """ABC:"(.*)",""".r,但得到ABC:"xxx",sdfsf234:"sdaf"作为输出字符串。

我做错了什么?

感谢。

2 个答案:

答案 0 :(得分:2)

你可以寻找这样的比赛

    val p = """[^ :,"]+[\s]*:"[^"]*"""".r
    p findAllIn """asdwf:"ssdf", as232:"ss",ABC:"xxx",sdfsf234:"sdaf""""

现在你可以得到一个包含所有匹配项的迭代器。

你可以像这样提取他们的内容

    (p findAllIn """asdwf:"ssdf", as232:"ss",ABC:"xxx",sdfsf234:"sdaf"""").map(str => {
        val p(key, value) = str
        (key, value)
    }).toMap

答案 1 :(得分:0)

尝试使用non-greedy expression,即:

val Pattern = """ABC:"(.*?)"""".r

<强>更新

我不是scala用户,我无法测试代码,但从理论上讲,以下内容应该用ABC

的值替换所有内容
val res = """ asdwf:"ssdf", as232:"ss",ABC:"xxx",sdfsf234:"sdaf"""".replaceAll(""".*ABC:"(.*?)".*""", "$1")

我在scala上参加了速成课程,正则表达式似乎有效:

https://ideone.com/LAlCc0