Regex Scala正则表达式正负同时向后看

Regex Scala正则表达式正负同时向后看,regex,scala,Regex,Scala,我有一个这样的输入字符串 val input = """["abc:def&ghi:jkl"]""" val input = """["abc:de_&_f:xyz&ghi:jkl"]""" 我想提取abc和ghi,所以我编写了这个正则表达式 val regex = """(?<=["&])(\w+)(?=[:])""".r regex.findAllIn(input).foreach(println) 相配 abc _f ghi 我想把正则表达式的

我有一个这样的输入字符串

val input = """["abc:def&ghi:jkl"]"""
val input = """["abc:de_&_f:xyz&ghi:jkl"]"""
我想提取
abc
ghi
,所以我编写了这个正则表达式

val regex = """(?<=["&])(\w+)(?=[:])""".r
regex.findAllIn(input).foreach(println)
相配

abc
_f
ghi
我想把正则表达式的逻辑改为

当对
的“向前看”为真时,匹配
\w+
,对
&
的“向后看”为真,对
&
的“向后看”为假时,匹配
\w+


所以我想同时使用正面和负面的观点。我该怎么做?

您可以先使用一个否定字符类来更新模式,使其与
\w
中的下划线不匹配

由于您只需要一个匹配项,因此可以省略捕获组
()
,并且可以省略
[:]
中的方括号

(?<=["&])[^\W_]\w*(?=:)

(?您可以在正则表达式中的lookback表达式中添加负lookback和负lookahead,如下所示:

(?<=(?:(?<!_)&(?!_)|"))\w+(?=:)


(?将跳过匹配,如果
\w+
前面有
&

,但这不适用于输入
val input=“a\u bc:def”
。我们只有在遇到
&
时才必须跳过,否则就不能跳过。@known你的意思是什么?当这起作用时。我的问题是,我们可以在正查找和负查找之间进行AND运算吗?第二次输入的预期结果是什么?非正则表达式解决方案如何?1)第一个字符串:
子字符串(0,第一个冒号的索引)
.2)第二个字符串:
子字符串(符号和的索引,下一个冒号的索引)
。对结果应用筛选器也应该很容易。预期的输出与第一个相同。问题是关于正则表达式的。@known不太确定。这就是我发表评论的原因。似乎在
上使用一些简单的过滤可以很容易地产生相同的结果。非常好的解决方案+1.
(?<=["&])(?<!_&)\w+(?=:)