RegEx在数字前匹配字符但是

时间:2012-09-04 19:42:41

标签: regex

仅在至少3个字符后才能匹配其中一个字符,例如 对于lumia820,匹配应为a8,但对于aa6,则不应有任何匹配。 我目前的尝试是/([a-z]{3,})([0-9])/,但这错误地包含了主角。这对于正则表达式专家来说可能很容易,但我完全被困在这里..有人可以帮忙吗?

2 个答案:

答案 0 :(得分:2)

如果您需要至少3个,则可以使用{2,}匹配2个或更多,然后捕获以下字符以及下一个数字:

/[a-z]{2,}([a-z][\d])[\d]*/
  • [a-z]{2,}在开始时至少匹配2个字符。这样可以确保在之前有两个或更多字符
  • ([a-z][\d])捕获下一个字符,后跟第一个数字
  • [\d]*匹配任何剩余的尾随数字。

如果必须这样做,请不要忘记^$

/^[a-z]{2,}([a-z][\d])[\d]*$/

JavaScript示例:

// Matching example aabc9876 yields c9
"a string with aabc9876 and other stuff".match(/[a-z]{2,}([a-z][\d])[\d]*/)
// ["aabc9876", "c9"]

// Non-matching example with zx8 
"a string with zx8 should not match".match(/[a-z]{2,}([a-z][\d])[\d]*/)
// null

答案 1 :(得分:2)

假设您处于允许外观的环境中,您可以这样做:

/(?<=[a-z]{2,})([a-z][0-9])/

这将在我们想要捕获之前查找两个或更多字母,确保它们在那里而不将它们包含在捕获组中,然后捕获第三个(或更多)字母后跟数字。捕获本身将确保第三个字母存在。

@HolyMac根据您的评论:

请注意,我使用的是c#,我不确定与Objective-C的区别,但以下匹配f9对我来说:

string testString = "abasfsdf9314";
Regex regex = new Regex("(?<=[a-z]{2,})([a-z][0-9])");
Match match = regex.Match(testString);