假设我有一个具有以下模式的字符串:一堆我不关心的文本,后面是一些文字,附在" ["和"]"。在封闭空间内,我在"("和")"中附上了一些文字。我要摆脱的第二组文字。最后,我想在第一个封闭内返回这些内容,然后我将用新文本替换:
Blah [(删除)字段:(删除)名称(删除)] Blah
我希望从以上示例中返回的内容如下(分两步使其更清晰):
首先:
Blah [场名:姓名] Blah
然后:
Blah ReplacedText Blah
如何使用Regex.Replace进行此操作?
**编辑**
事实上,理想情况下,如果我能够真正找回价值"名称"在上面的例子中,对于我的替换,它会更好。换句话说,用一个值替换[Field:Name],但获得" Name"在一个小组中也是如此。
答案 0 :(得分:1)
string text = "Blah [(remove)Field:(remove)Name(remove)] Blah";
string replacement = "ReplacedText";
string pattern = @"\[ \( .*? \) Field: \( .*? \) (?'name' .*? ) \( .*? \) \]";
string name = null;
var result = Regex.Replace(text, pattern, m =>
{
name = m.Groups["name"].Value;
return replacement;
},
RegexOptions.IgnorePatternWhitespace);
Console.WriteLine(name);
Console.WriteLine(result);
答案 1 :(得分:0)
第一步,使用:
(\(.*?\))
用空字符串替换匹配项(只是为了删除它们)。 结果将是:
Blah [场名:姓名] Blah
第二步,使用几乎相同的正则表达式:
(\[.*?\])
用您想要的任何文字替换匹配。结果将是:
Blah ReplacedText Blah
修改:
如果您想在编辑中保留名称信息,可以使用此正则表达式代替第二个:
(\[.*?:(.*?)\])
这样,第一个组将保存您要替换的文本,第二个组将保存值为':'的值,在您的情况下为'Name'。
答案 2 :(得分:0)
以下是使用RegEx的简单示例:
var pattern = @"\[.*Field:.*Name.*\]";
var r = new System.Text.RegularExpressions.Regex(pattern);
var newText = r.Replace("Blah [1ad3d Field: (stuff) Name ] Blah", "My Custom Replacement Text");
Console.WriteLine(newText); // newText="Blah My Custom Replacement Text Blah"