我有这样的输入字符串
val input = """["abc:def&ghi:jkl"]"""
我想提取
abc
和ghi
,所以我写了这个有效的正则表达式val regex = """(?<=["&])(\w+)(?=[:])""".r
regex.findAllIn(input).foreach(println)
因此,基本上,我对
:
有所了解,对"
或&
有所了解。到目前为止,一切都很好。但是现在我有这样的输入
val input = """["abc:de_&_f:xyz&ghi:jkl"]"""
它匹配
abc
_f
ghi
我想改变我的正则表达式的逻辑。
当
\w+
的前向为true且:
的前向为true且&
的值为false时,匹配_&_
因此,我想同时使用正面和负面的表情。我怎么做?
最佳答案
您可以在正则表达式的lookbehind表达式内添加负向后看和负向前看,如下所示:
(?<=(?:(?<!_)&(?!_)|"))\w+(?=:)
RegEx Demo
在这里,我们在后向条件中使用了一种交替:
(?<!_)&(?!_)|"
:如果未在&
之前和之后跟随_
,则匹配|
"
:或"
匹配(?<!_&)
对于您的情况,此较短的正则表达式也可能有效:
(?<=["&])(?<!_&)\w+(?=:)
RegEx Demo 2
如果
\w+
前面有_&
,ojit_code将跳过比赛。