首页 文章

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

提问于
浏览
1

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

我的输入字符串看起来像:

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

我想在 ABC 之后提取 xxx .

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

我做的不对吗?

谢谢 .

2 回答

  • 2

    尝试使用non-greedy expression,即:

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

    Update:

    我不是 scala 用户,我无法测试代码,但理论上以下内容应该用 ABC 的值替换所有内容

    val res = """ asdwf:"ssdf", as232:"ss",ABC:"xxx",sdfsf234:"sdaf"""".replaceAll(""".*ABC:"(.*?)".*""", "$1")
    

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

    https://ideone.com/LAlCc0

  • 0

    你可以找这样的比赛

    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
    

相关问题