3

我需要搜索一个字符串,看看它是否包含 "<addnum(x)>"

我在搜索的其他词上使用了 .contains,我能想到的最简单的方法是您可以以某种方式对数字进行例外处理,或者您是否需要为此使用其他代码?

我的代码到此为止。

public List<string> arguments = new List<string>();

    public void Custom_naming(string name_code)
    {
        arguments.Add("Changing the name to " + name_code); // Sets the new name.

        if( name_code.Contains("<addnum>") ) 
        {
            Add_number();
        }

        if (name_code.Contains("<addnum(x)>"))
        {// X = any number.
        }
    }
    private void Add_number() 
    {
        arguments.Add("Replaces all <addnum> with a number");
    }

    private void Add_number(int zeros) 
    {
        arguments.Add("Replaces all <addnumxx> with a number with lentgh of");
    }
4

2 回答 2

4

使用正则表达式:

string s = "Foo <addnum(8)> bar.";
var contains = Regex.IsMatch(s, @"<addnum\(\d+\)>");

如果您还想提取号码:

string s = "Foo <addnum(42)> bar.";
var match = Regex.Match(s, @"<addnum\((\d+)\)>");
if (match.Success)
{
    // assume you have valid integer number
    var number = Int32.Parse(match.Groups[1].Value);
}
于 2013-07-21T12:33:38.493 回答
4

您可能需要使用正则表达式:

var match = Regex.Match(name_code, @"<addnum(?:\((\d+)\))?>");
if (match.Success)
{
    int zeros;
    if (int.TryParse(match.Groups[1].Value, out zeros))
    {
        Add_number(zeros);
    }
    else
    {
        Add_number();
    }
}

Add_number如果name_code包含<addnum>或类似的东西,这将返回调用适当的方法<addnum(123)>

name_code如果在, eg中可能有多个这样的<addnum(1)><addnum(2)>,您将需要使用循环来分析每个匹配项,如下所示:

var matches = Regex.Matches(name_code, @"<addnum(?:\((\d+)\))?>");
foreach(var match in matches)
{
    int zeros;
    if (int.TryParse(match.Groups[1].Value, out zeros))
    {
        Add_number(zeros);
    }
    else
    {
        Add_number();
    }
}
于 2013-07-21T12:33:49.320 回答