我有一个单词串,其中每个单词由换行符分隔。我已使用RegEx替代品插入' {'和' } '公共前缀和后缀周围的字符。结果如下:
{con}descens{ion}
lumberjack
tim{ing}
{tox}{icity}
fish
{dis}pel
我想弄清楚的是我如何在此字符串上执行RegEx替换,该字符串只匹配&#39;之间的文字 而不是 。的 {&#39;和&#39; } &#39;字符。我还有进一步的替换,每次我做,我都会放置 {&#39;和&#39; } &#39;比赛周围的人物;在执行新的替换时,我只是不想要匹配之前的替换(或其中的部分)。我知道如何匹配&#34; 不是&#39; {&#39; &#34;,例如,但我不知道如何匹配&#34; < em>不在&#39; {&#39;和&#39;}&#39; &#34;
为了正确看待,这里的示例下一个替换操作是替换所有&#39; n &#39;带有&#39; 7 &#39;的字符字符。在这种情况下,字符串的第一行&#34; {con}下降{ion}&#34;,应该变为&#34; {con}下降{7} s {ion}&#34;而不是&#34; {co {7}}下降{7} s {io {7}}&#34 ;;根据这些标准,其他词语将保持不变。
有什么建议吗?
答案 0 :(得分:10)
假设你的大括号总是平衡的,你可以在这里使用 Negative Lookahead 。
[a-zA-Z]+(?![^{]*\})
注意:这仅匹配A
到Z
范围内的字符,如果字词包含空格或您有其他字符需要被允许或不确定输入类型,你可以在这里使用否定匹配。
[^}]+(?![^{]*\})
答案 1 :(得分:2)
在支持可变长度后视的正则表达式引擎中,这很简单:
(?<=^|\})[^{]+
在一个不支持后视(或仅限固定长度的后视)的视频中,它有点不同:
(^|})([^{])
在这里你必须使用两个组:组1不包含任何内容或}
,根据匹配的位置,组2包含实际匹配。如果进行替换,请确保重新插入组1的内容。
请注意,此答案对嵌套构造不起作用。