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