正则表达式noob在这里。
示例路径:
home://Joseph/age=20/race=human/height=170/etc
使用正则表达式,如何在/ Joseph / path和/ etc之间的“=”之后抓取所有内容?我正在尝试创建一个列表
[20, human, 170]
到目前为止我有
val pattern = ("""(?<=Joseph/)[^/]*""").r
val matches = pattern.findAllIn(path)
该模式让我得到“年龄= 20”,但我认为findAllIn会让我找到所有“参数=”匹配。在那之后,我不确定如何使用正则表达式来获得“20岁”中的“20”等。
你的模式直接在Joseph/
之后寻找模式,这就是为什么只有age=20
匹配,也许只是照看=
?
val s = "home://Joseph/age=20/race=human/height=170/etc"
// s: String = home://Joseph/age=20/race=human/height=170/etc
val pattern = "(?<==)[^/]*".r
// pattern: scala.util.matching.Regex = (?<==)[^/]*
pattern.findAllIn(s).toList
// res3: List[String] = List(20, human, 170)
(?:(?<=/Joseph/)|\G(?!\A)/)[^=]+=([^=/]+)
object Main extends App {
val path = "home://Joseph/age=20/race=human/height=170/etc"
val pattern = ("""(?:(?<=/Joseph/)|\G(?!\A)/)[^=]+=([^=/]+)""").r
pattern.findAllIn(path).matchData foreach {
m => println(m.group(1))
}
}
home://Joseph/age=20/race=human/height=170/etc
20
human
170
(?:(?<=/Joseph/)|\G(?!\A)/)
符合以下条件
(?<=/Joseph/)
积极的外观确保在/Joseph/
字面上匹配之前
\G(?!\A)/
在上一场比赛结束时断言位置,并按字面意思匹配/
[^=]+
匹配除=
之外的任何角色中的一个或多个=
按字面意思对比([^=/]+)
将除=
和/
之外的任何角色中的一个或多个捕获到捕获组1中