2016-07-20 29 views
3

我試圖找到子字符串EnemyType('XXXX')的所有實例,其中XXXX是一個任意字符串,並且EnemyType('XXXX')的instannce可以出現多次。尋找字符串中的模式如何?

現在我在C#中使用index of/substring函數的財團,但想知道是否有更乾淨的方法來實現它?

+1

你想用'EnemyType('XXXX')'字符串來做什麼? – DestinatioN

+0

如果可能,請包含當前代碼,並且當前代碼有什麼問題 –

+0

@DestinationN我只是想知道XXXXXXX在EnemyType內部用於文件解析的目的。 – tweetypi

回答

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 

正則表達式是對於解析字符串一個非常好的工具。如果你經常分析字符串,正則表達式可以讓生活變得更容易。

+0

Enemytype('XXXXXX')的情況如何(即字符串中有4個以上字符) – tweetypi

+0

'\ d {n}'其中n可以是任意數字。這意味着它應該至少匹配n個數字字符。如果你不知道有多少個,你可以使用'\ d +'代替,至少意味着一個數字字符。 – kurakura88

+0

在[鏈接](http://www.regular-expressions.info/repeat.html)中的「限制重複」部分可以看到更多內容。 – jetstream96