【发布时间】:2019-10-10 13:05:11
【问题描述】:
我正在尝试编写一个正则表达式来在至少有 100 个字符的文本中查找匹配项。匹配应该是这样的 - 字符串中的任何子字符串至少包含 3 个字母开头,后面至少有 1 个数字,3 个字母后面最多有 2 个数字。
示例 -
abcjkhklfdpdn24hjkk - 在这种情况下,我想提取 pdn24
hjdksfkpdf1lkjk - 在这种情况下,我想提取 pdf1
hjgjdkspdg34kjfs dhj khk678jkfhlds1 - 在这种情况下,我想要 pdg34 和 lds1
如何为此编写正则表达式?匹配的起始字母长度始终为 3,数字长度可以是 1 或 2(不多不少)
如果 3 个字母的字符串后面有 2 个数字,这就是有效的。
[A-Za-z]{3}[0-9]{2}
但数字的长度可以在 1 和 2 之间变化。如何在正则表达式中包含不同的长度?
【问题讨论】:
-
这 100 个字符应该提前用长度函数检查。要获得所有你想要的,只需要一个 findall 类型的函数或一个循环搜索函数。
(?i)[a-z]{3}\d{1,2} -
“……至少 3 个字母开头……”有点令人困惑。从您的示例来看,我认为您只想匹配每个包含 3 个字母后跟 1 或 2 个数字的子字符串,而不是数字。
-
是的,没错。每 3 个字母的子字符串后跟 1 或 2 个数字。
标签: regex ruby regex-lookarounds regex-group regex-greedy