在字符串中寻找模式如何?

时间:2016-07-20 04:37:21

标签: c# string

我试图查找子字符串EnemyType('XXXX')的所有实例,其中XXXX是一个任意字符串,EnemyType('XXXX')的实例可能会出现多次。

现在我在C#中使用了index of / substring个函数的联盟,但想知道是否有更简洁的方法吗?

1 个答案:

答案 0 :(得分:3)

使用正则表达式。例如:

using System.Text.RegularExpressions;

var inputString = "   EnemyType('1234')abcdeEnemyType('5678')xyz";
var regex = new Regex(@"EnemyType\('\d{4}'\)");

var matches = regex.Matches(inputString);

foreach (Match i in matches)
{
    Console.WriteLine(i.Value);
}

它将打印:

EnemyType('1234')
EnemyType('5678')

要匹配的模式为@"EnemyType\('\d{4}'\)",其中\d{4}表示4个数字字符(0-9)。括号用反斜杠转义。

编辑:由于您只希望字符串在引号内,而不是整个字符串,因此您可以使用命名组。

var inputString = "   EnemyType('1234')abcdeEnemyType('5678')xyz";
var regex = new Regex(@"EnemyType\('(?<id>[^']+)'\)");

var matches = regex.Matches(inputString);

foreach (Match i in matches)
{
    Console.WriteLine(i.Groups["id"].Value);
}

现在打印:

1234
5678

Regex是一个非常好的解析字符串的工具。如果你经常解析字符串,正则表达式可以让生活变得更加轻松。