我的模式如下:
{(代码)}
代码是一个数字(最多6位数),或2个字母后跟数字 例如:
{(45367)}
{(265367)}
{(EF127012)}
我想在长字符串中找到所有出现的内容,我不能只使用纯正则表达式,因为我需要在找到匹配项时执行某些操作(比如记录位置和匹配类型)。
答案 0 :(得分:5)
您所指的内容仍然可以使用正则表达式完成。请尝试以下方法......
Regex regex = new Regex(@"\{\(([A-Z]{2}\d{1,6}|\d{1,6})\)\}");
String test = @"my pattern is the following:
我想在长字符串中找到所有出现的内容
var matches = regex.Matches(test);
foreach (Match match in matches)
{
MessageBox.Show(String.Format("\"{0}\" found at position {1}.", match.Value, match.Index));
}
我希望有所帮助。
答案 1 :(得分:1)
\{\(([A-Z]{2})?\d{1,6}\)\}
\{ # a literal { character \( # a literal ( character ( # group 1 [A-Z]{2} # letters A-Z, exactly two times )? # end group 1, make optional \d{1,6} # digits 0-9, at least one, up to six \) # a literal ) character \} # a literal } character
答案 2 :(得分:1)
将MatchEvaluator与正则表达式一起使用以获取匹配的位置和类型。
答案 3 :(得分:0)
未经编译和未经测试的代码示例
public void LogMatches( string inputText )
{
var @TomalaksPattern = @"\{\(([A-Z]{2})?\d{6}\)\}"; // trusting @Tomalak on this, didn't verify
MatchCollection matches = Regex.Matches( inputText, @TomalaksPattern );
foreach( Match m in matches )
{
if( Regex.Match( m.Value, @"\D" ).Success )
Log( "Letter type match {0} at index {1}", m.Value, m.Index );
else
Log( "No letters match {0} at index {1}", m.Value, m.Index );
}
}
答案 4 :(得分:0)
foreach (Match m in Regex.Matches(yourString, @"(?:[A-Za-z]{2})?\d{1,6}"))
{
Console.WriteLine("Index=" + m.Index + ", Value=" + m.Value);
}