ruby regex .scan

mic*_*ael 5 ruby regex

我正在使用Ruby的scan()方法来查找特定格式的文本.然后我将它输出到用逗号分隔的字符串中.我试图找到的文字看起来像这样:

AB_ABCD_123456

这是我到目前为止找到的内容.它工作正常:

text.scan(/.._...._[0-9][0-9][0-9][0-9][0-9][0-9]/)
puts text.uniq.sort.join(', ')
Run Code Online (Sandbox Code Playgroud)

现在我需要一个正则表达式,在最后有或没有两个字母的国家名称.例如,我希望能够找到以下所有三个:

AB_ABCD_123456
AB_ABCD_123456UK
AB_ABCD_123456DE

我知道我可以使用两到三次不同的扫描来实现我的结果,但我想知道是否有办法让一个正则表达式全部三个.

sep*_*p2k 13

/.._...._[0-9][0-9][0-9][0-9][0-9][0-9](?:[A-Z][A-Z])?/
Run Code Online (Sandbox Code Playgroud)

您还可以使用{}缩短正则表达式:

/.{2}_.{4}_[0-9]{6}(?:[A-Z]{2})?/
Run Code Online (Sandbox Code Playgroud)

说明:?使前面的模式可选.()将表达式组合在一起(所以ruby知道?这两个字母适用).在?:该开口之后(,使该组非捕捉(捕获组将改变由扫描得到的值).