string = myfx("{0}test123", test);
string2 = myfx("actual string");
上面的行只是文本文件中10行文本中的几行。我迭代文本文件,想知道是否有一个正则表达式将覆盖上面显示的2个场景。
目标字符串是" test123"和"实际字符串"。有没有办法告诉正则表达式不要引入" {0}"如果它发生?
答案 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();