我有一个符合以下模式的字符串:
(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...
)就足够了。
答案 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;
}
}