2

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

4

2 回答 2

2

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

/[a-z]{2,}([a-z][\d])[\d]*/
  • [a-z]{2,}在开头至少匹配 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
于 2012-09-04T19:45:13.363 回答
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);
于 2012-09-04T19:46:36.417 回答