C#正则表达式:如何获取具有条件的两个文本之一?

时间:2014-08-21 12:26:44

标签: c#

我有类似的东西" [sex:he|she] took the dog for a walk" 之后我从用户那里得到性别(男性为2,女性为1) 如果性别是男性,那么我希望文本是"他带着狗去散步" 我怎么能这样做?

我现在所拥有的只是我可以使用小组获得价值

Regex r = new Regex("^(?<name>\\w+):(?<value>\\w+)");
Match m = r.Match("Section1:119900"); 

Console.WriteLine(m.Groups["name"].Value); 
Console.WriteLine(m.Groups["value"].Value);

然而,我无法为其添加括号或使用条件

1 个答案:

答案 0 :(得分:0)

您可以捕获每个值并使用MatchEvaluator来处理组。

string inputString = "[sex:he|she] took the dog with [sex:him|her]";
string result = Regex.Replace(inputString, @"\[(?<name>[^:]+):(?<value1>[^\|]+)\|(?<value2>[^\]]+)\]", Evaluator);

评估人员可以用适当的回复取代任何一组:

private string Evaluator(Match match)
{
    if (match.Groups["name"].Value == "sex")
    {
        if (m_IsMale)
        {
            return match.Groups["value1"].Value;
        }
        else
        {
            return match.Groups["value2"].Value;
        }
    }
    // No replacement, return the original value.
    return match.Value;
}

以上结果

he took the dog with him

she took the dog with her