正则表达式查找字符串中不同字符的位置
Regexp find position of different characters in string
我有一个符合以下模式的字符串:
(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...
)就足够了。
如果您需要基于正则表达式的解决方案,您只需围绕所需的模式使用 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]
正则表达式:
string pattern = @"[A-Z]+(-)\d+(\.)\d+(M)\d+[A-Z]+";
string value = "ASF-1.15M437979CA 100000 or EU-12.15M121515PO 1145";
var match = Regex.Match(value, pattern);
if (match.Success)
{
int sep1 = match.Groups[1].Index;
int sep2 = match.Groups[2].Index;
int sep3 = match.Groups[3].Index;
}
我有一个符合以下模式的字符串:
(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...
)就足够了。
如果您需要基于正则表达式的解决方案,您只需围绕所需的模式使用 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]
正则表达式:
string pattern = @"[A-Z]+(-)\d+(\.)\d+(M)\d+[A-Z]+";
string value = "ASF-1.15M437979CA 100000 or EU-12.15M121515PO 1145";
var match = Regex.Match(value, pattern);
if (match.Success)
{
int sep1 = match.Groups[1].Index;
int sep2 = match.Groups[2].Index;
int sep3 = match.Groups[3].Index;
}