1

我确定这是重复的,但找不到正确的搜索条件。

基本上我有一个用户提供的字符串,其关键字括在大括号中,我想要一个可以找到关键字但会忽略双组分隔符的正则表达式。

例如:“{{hat}} 中的猫不会咬 {back}。”

我需要返回 {back} 但不返回 {hat} 的正则表达式。

这是针对 C# 的。

4

4 回答 4

2

这就是你要找的

(?<!\{)\{\w+\}(?!\})
于 2013-05-22T01:48:25.663 回答
1

描述

试试这个,这将要求左括号和右括号是单一的。双括号将被忽略。

另请参阅此永久链接示例

[^{][{]([^}]*)[}][^}]

在此处输入图像描述

时间:2019-06-10 标签:c#example

using System;
using System.Text.RegularExpressions;
namespace myapp
{
  class Class1
    {
      static void Main(string[] args)
        {
          String sourcestring = "A cat in a {{hat}} doesn't bite {back}.";
          Regex re = new Regex(@"[^{][{]([^}]*)[}][^}]");
          MatchCollection mc = re.Matches(sourcestring);
          int mIdx=0;
          foreach (Match m in mc)
           {
            for (int gIdx = 0; gIdx < m.Groups.Count; gIdx++)
              {
                Console.WriteLine("[{0}][{1}] = {2}", mIdx, re.GetGroupNames()[gIdx], m.Groups[gIdx].Value);
              }
            mIdx++;
          }
        }
    }
}

$matches Array:
(
    [0] => Array
        (
            [0] =>  {back}.
        )

    [1] => Array
        (
            [0] => back
        )

)
于 2013-05-22T01:46:11.927 回答
1

答案会因您使用的正则表达式解析器而略有不同,但您可能想要如下内容:

(?:[^{]){([^}]*)}|{([^}]*)}(?:[^}])|^{([^}]*)}$

非“{”(不是匹配的一部分)后跟“{”(捕获)所有非“}”字符(结束捕获)后跟“}”,或者...

“{”后跟“{”(捕获)所有非“}”字符(结束捕获)后跟非“}”(不是匹配的一部分),或者...

行首后跟“{”(捕获)所有非“}”字符(结束捕获)后跟行尾

请注意,某些解析器可能无法识别“?:”运算符,并且某些解析器可能要求对以下部分或全部字符(当不在“[]”内时)进行反斜杠转义: { } ( ) |

于 2013-05-22T01:46:49.857 回答
0

不太难,只是使用了 Regex 助手:

(?:[^{]){([^}]*)}|{([^}]*)}(?:[^}])|^{([^}]*)}$
于 2013-05-22T01:54:27.237 回答