我正在寻找真正简单的字符串,但努力获得正确的正则表达式。
字符串可能如下所示:
string1 = "{[Surname]}, some text... {[FirstName]}"
string2 = "{Item}foo.{Item2}bar"
我想在花括号中提取标记(因此string1获取"{[Surname]}","{[FirstName]}"
而string2获取"{Item}"
和"{Item2}"
)
基本上,我想提取两种不同的令牌类型:{[Foo]}和{Bar}。
这个问题相当不错,但我无法正确使用正则表达式: poor mans lexer for c# 谢谢你的帮助!
答案 0 :(得分:2)
他们都是很好的答案,谢谢。这就是我最终解决的问题:
// DataToken = {[foo]}
// FieldToken = {Bar}
string pattern = @"(?<DataToken>\{\[\w+\]\})|(?<FieldToken>\{\w+\})";
MatchCollection matches = Regex.Matches(expression.ExpressionString, pattern,
RegexOptions.ExplicitCapture);
string fieldToken = string.Empty;
string dataToken = string.Empty;
foreach (Match m in matches)
{
// note that EITHER fieldtoken OR DataToken will have a value in each loop
fieldToken = m.Groups["FieldToken"].Value;
dataToken = m.Groups["DataToken"].Value;
if (!string.IsNullOrEmpty(dataToken))
{
// Do something
}
if (!string.IsNullOrEmpty(fieldToken))
{
// Do something else
}
}
答案 1 :(得分:1)
除非规则非常复杂,否则第一个字符串为(?<Token>\{\[.+?\]\})
,第二个字符串为(?<Token>\{.+?\})
答案 2 :(得分:1)
(?<token>\{[^\}]*\})