我确定这是重复但无法找到正确的搜索条件。
基本上我有一个用户提供的字符串,其中的关键字用大括号括起来,我想要一个能找到关键字的正则表达式,但会忽略两组分隔符。
示例:“{{hat}}中的猫不咬{后退}。”
我需要返回{back}而不是{hat}的正则表达式。
这是针对C#。
答案 0 :(得分:2)
这就是你要找的东西
(?<!\{)\{\w+\}(?!\})
答案 1 :(得分:1)
试试这个,这需要打开和关闭括号是单一的。双括号将被忽略。
[^{][{]([^}]*)[}][^}]
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
)
)
答案 2 :(得分:1)
答案会因您使用的正则表达式解析器而略有不同,但以下内容可能与您的需求相似:
(?:[^{]){([^}]*)}|{([^}]*)}(?:[^}])|^{([^}]*)}$
非“{”(不是匹配的一部分)后跟“{”(捕获)所有非“}”字符(结束捕获),后跟“}”,或者......
“{”后跟“{”(捕获)所有非“}”字符(结束捕获),然后是非“}”(不是匹配的一部分),或者......
开始后跟“{”(捕获)所有非“}”字符(结束捕获),然后是行尾
请注意,某些解析器可能无法识别“?:”运算符,并且某些解析器可能要求以下部分或全部字符(当不在“[]”内部时)反斜杠转义:{}()|
答案 3 :(得分:0)
使用正则表达式助手时不太难:
(?:[^{]){([^}]*)}|{([^}]*)}(?:[^}])|^{([^}]*)}$