在 C# Regex 中检索括号之间的字符串

Retrieve string between parathesis in C# Regex

我想知道我是否可以突出显示{任意字符串}

之间的字符串

这是我试过的。

^{(.*)}$

这行得通,但这种情况下也检索括号

{hi}

但是我只想检索字符串,而不是括号。

{hi}

示例:

hell(?=o) 试试这个语法,当它后面跟着 "o" 而不是 hello

时,它将完全匹配 hell 词

就这样,我想匹配字符串,当它在左括号之后和右括号之间而不是括号之间开始时。

谁能指导我,我们如何才能忽略括号并只检索字符串?

由于此查询涉及自定义控件,我需要使用正则表达式解决

备注

更多信息见截图

输出

预计

感谢任何帮助。

无论出于何种原因您不能使用组 - 在您的示例中您已经使用了 lookahead。通过在模式的开头添加回顾来完成模式。

(?<={)[^}]*(?=})

[^}]* 匹配 any amount of characters, that are not } 如果前面有 { 如果后面有 }.

See demo at Regex Storm

由于您似乎特别想检索花括号(而不是圆括号)之间的值,因此您需要执行正则表达式匹配 - 即分组。

string phrase = "{hi} my name is Chris.";    
Regex exp = new Regex(@"\{(.*?)\}");
string match = exp.Match("{hi}").Groups[1].Value;

现在,我承认这不是最直观的方法;但是,它确实可以完成工作。 Full Match returns '{hi}',而 Group 1 returns 您要查找的值 'hi'。

您可以使用这个正则表达式:

(?<={)(.*)(?=})

查看我在 regexstorm.net

上的示例

请务必查看有关 Lookahed 和 Lookbacks 的 post。 Regex lookahead, lookbehind and atomic groups

I want to know if I can highlight strings between {any string}

在正则表达式领域,匹配捕获以及基本分组

您想要匹配 {hi},但您想要 hi 进入 捕获 组。这是使用 ( ) 构造模式完成的。一场比赛可以容纳不同组中的所有三个人。

记住这些事项。

  • Groups[0]总是整场比赛
  • Groups[1-N] 是指定 ( ) 构造时的单独捕获。
  • 模式 {Hi} 将匹配“{Hi}”,它可以在 Group[0] 的整个匹配中找到。
  • 模式 {(Hi)} 也将匹配 Group[0] 中的“{Hi}”,但它会将 "hi" 捕获到 Group[1].

winforms中文本高亮的过程我不会说。