我有一个用例,我想从scala中的输入中提取某些字符串。
我的输入字符串类似于:
asdwf:"ssdf", as232:"ss",ABC:"xxx",sdfsf234:"sdaf"
我想在xxx
之后提取ABC
。
我尝试定义正则表达式匹配模式:
val Pattern = """ABC:"(.*)",""".r
,但得到ABC:"xxx",sdfsf234:"sdaf"
作为输出字符串。
我做错了什么?
感谢。
答案 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
上参加了速成课程,正则表达式似乎有效: