我有一个用例,我想从scala中的输入中提取某些字符串 .
我的输入字符串看起来像:
asdwf:"ssdf", as232:"ss",ABC:"xxx",sdfsf234:"sdaf"
我想在 ABC 之后提取 xxx .
ABC
xxx
我尝试定义一个正则表达式匹配模式:val Pattern = """ABC:"(.*)",""".r ,但得到 ABC:"xxx",sdfsf234:"sdaf" 作为输出字符串 .
val Pattern = """ABC:"(.*)",""".r
ABC:"xxx",sdfsf234:"sdaf"
我做的不对吗?
谢谢 .
尝试使用non-greedy expression,即:
val Pattern = """ABC:"(.*?)"""".r
Update:
我不是 scala 用户,我无法测试代码,但理论上以下内容应该用 ABC 的值替换所有内容
scala
val res = """ asdwf:"ssdf", as232:"ss",ABC:"xxx",sdfsf234:"sdaf"""".replaceAll(""".*ABC:"(.*?)".*""", "$1")
我在 scala 上参加了一个速成课程,正则表达式似乎有效:
https://ideone.com/LAlCc0
你可以找这样的比赛
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
2 回答
尝试使用non-greedy expression,即:
Update:
我不是
scala
用户,我无法测试代码,但理论上以下内容应该用ABC
的值替换所有内容我在
scala
上参加了一个速成课程,正则表达式似乎有效:https://ideone.com/LAlCc0
你可以找这样的比赛
现在你可以得到一个包含所有匹配的迭代器 .
你可以像这样提取他们的内容