正则表达式可选字符

时间:2012-03-07 00:17:13

标签: c# regex

string = myfx("{0}test123", test);
string2 = myfx("actual string");

上面的行只是文本文件中10行文本中的几行。我迭代文本文件,想知道是否有一个正则表达式将覆盖上面显示的2个场景。

目标字符串是" test123"和"实际字符串"。有没有办法告诉正则表达式不要引入" {0}"如果它发生?

3 个答案:

答案 0 :(得分:1)

要查找不在花括号内的所有文本,请使用正则表达式:

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

测试:

Regex filter = new Regex(@"(?<=^|\})(?<!\{)[^\{\}]+(?<!\})(?=\{|$)");
string text = "Blah { Bleh} Blih {Bloh } Bluh";
foreach (Match match in filter.Matches(text))
{
    Console.WriteLine("\"{0}\"", match.Capture[0].Value);
}
Console.ReadLine();

输出:

"Blah "
" Blih "
" Bluh"

此方法仍有局限性。假设大括号是配对的。虽然有很多工作可以使它变得万无一失,但我希望它适合你的情况。

答案 1 :(得分:0)

你可以使用:

string myfx = "{0}test123";
Regex regex = new Regex("(test123|actual string)");
string capturedValue = regex.Match(myfx).Captures[0].Value;

答案 2 :(得分:0)

编辑:M42是正确的,因为看起来没有效果。

也许:

string input = "{9}test123";//"regular string"
var pattern = @"(?>\{\d\})?(?<target>[^""]+)";
var match = Regex.Match(input, pattern);
string result = match.Groups["target"].ToString();