C#Regex用于删除模式中的文本

时间:2017-10-16 14:43:48

标签: c# regex

假设我有一个具有以下模式的字符串:一堆我不关心的文本,后面是一些文字,附在" ["和"]"。在封闭空间内,我在"("和")"中附上了一些文字。我要摆脱的第二组文字。最后,我想在第一个封闭内返回这些内容,然后我将用新文本替换:

  

Blah [(删除)字段:(删除)名称(删除)] Blah

我希望从以上示例中返回的内容如下(分两步使其更清晰):

首先:

  

Blah [场名:姓名] Blah

然后:

  

Blah ReplacedText Blah

如何使用Regex.Replace进行此操作?

**编辑**

事实上,理想情况下,如果我能够真正找回价值"名称"在上面的例子中,对于我的替换,它会更好。换句话说,用一个值替换[Field:Name],但获得" Name"在一个小组中也是如此。

3 个答案:

答案 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"