使用正则表达式查找两个字符之间的文本

时间:2014-05-30 06:39:13

标签: regex string replace

我有一个单词串,其中每个单词由换行符分隔。我已使用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 ;;根据这些标准,其他词语将保持不变。

有什么建议吗?

2 个答案:

答案 0 :(得分:10)

假设你的大括号总是平衡的,你可以在这里使用 Negative Lookahead

[a-zA-Z]+(?![^{]*\})

注意:这仅匹配AZ范围内的字符,如果字词包含空格或您有其他字符需要被允许或不确定输入类型,你可以在这里使用否定匹配。

[^}]+(?![^{]*\})

Live demo

答案 1 :(得分:2)

在支持可变长度后视的正则表达式引擎中,这很简单:

(?<=^|\})[^{]+

在一个不支持后视(或仅限固定长度的后视)的视频中,它有点不同:

(^|})([^{])

在这里你必须使用两个组:组1不包含任何内容或},根据匹配的位置,组2包含实际匹配。如果进行替换,请确保重新插入组1的内容。

请注意,此答案对嵌套构造不起作用。