Regexp在字符串中查找不同字符的位置

时间:2015-05-18 11:49:55

标签: c# regex string qregexp

我有一个符合以下模式的字符串:

(cc)-(nr).(nr)M(nr)(cc)whitespace(nr)

其中cc是任意数量的字母字符,nr是任意数字的字符数,M是实际字母 M

例如:

ASF-1.15M437979CA 100000
EU-12.15M121515PO 1145

我需要在字符串中找到-.M的位置。问题是,前导字符和结尾字符也可以包含字母M,但我只需要中间的字符。

作为替代方案,减去第一个字符(直到-)和前两个数字(如(nr).(nr)M...)就足够了。

2 个答案:

答案 0 :(得分:0)

如果您需要基于正则表达式的解决方案,您只需要围绕所需模式使用3个捕获组,然后访问Groups[n].Index属性:

var rxt = new Regex(@"\p{L}*(-)\d+(\.)\d+(M)\d+\p{L}*\s*\d+");
// Collect matches
var matches = rxt.Matches(@"ASF-1.15M437979CA 100000  or  EU-12.15M121515PO 1145");
// Now, we can get the indices
var posOfHyphen = matches.Cast<Match>().Select(p => p.Groups[1].Index);
var posOfDot = matches.Cast<Match>().Select(p => p.Groups[2].Index);
var posOfM = matches.Cast<Match>().Select(p => p.Groups[3].Index);

输出:

posOfHyphen => [3, 32]
posOfDot    => [5, 35]
posOfM      => [8, 38]

答案 1 :(得分:0)

正则表达式:

public class MyApplication extends Application
{
    private static MyApplication sInstance;

    public static MyApplication getInstance()
    {
        return sInstance;
    }

    @Override
    public void onCreate()
    {
        super.onCreate();
        sInstance = this;
    }
}