我正在使用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知道?这两个字母适用).在?:该开口之后(,使该组非捕捉(捕获组将改变由扫描得到的值).
| 归档时间: |
|
| 查看次数: |
12293 次 |
| 最近记录: |