使用正则表达式,我如何从这个序列代码中提取数字?

Using Regex, how do I extract the numbers from this serial code?

我有超过 1,000 个序列代码需要输入数据库,但出于转换识别目的,它们必须完全是数字。它们看起来都类似于这种格式,但包含不同的 characters/numbers:

d47a3c06-r188-4203-n838-fefd32082fd9

我一直在尝试弄清楚如何使用正则表达式删除所有字母和破折号,但我现在不知所措。

我需要知道如何打开这个: d47a3c06-a188-4203-b838-fefd32082fc9

进入这个: 473061884203838320829

使用正则表达式。然后可能 trim 使用前 5 个数字将其缩减为 5 位数字。

非常感谢!

根据您的编程语言,您可以轻松过滤数字并在之后加入它们。
这是 Python 中借助 re 模块和列表理解的示例:

import re

serials = ['d47a3c06-r188-4203-n838-fefd32082fd9', 'e48a3c08-r199-4203-n838-fefd32082fd0']
corrected_serials = []
for serial in serials:
    numbers = re.findall(r'\d+', serial)
    corrected_serials.append(''.join(numbers))

corrected_abbreviated = [item[0:5] for item in corrected_serials]

print corrected_serials
print corrected_abbreviated

# output
# ['473061884203838320829', '483081994203838320820']
# ['47306', '48308']

a demo on ideone.com

使用带有 s(搜索和替换)命令的第一个正则表达式,可以删除所有非数字 s/[^0-9]//g

结果与带有 s 命令的第二个正则表达式一起使用,仅打印第五个之前的数字 "/^\(.\{5\}\).*$//.

将这些与 bash shell 和 sed 命令一起使用。

如果序列号在 serials.txt 文件中:

cat serials.txt
d47a3c06-r188-4203-n838-fefd32082fd9

sed -e "s/[^0-9]//g" -e "s/^\(.\{5\}\).*$//" serials.txt
47306

使用printf

printf d47a3c06-r188-4203-n838-fefd32082fd9 | sed -e "s/[^0-9]//g" -e "s/^\(.\{5\}\).*$//"
47306

由于您使用的是 Drupal,如果您需要的是 PHP 中的答案,那么 @jay-jargot 对答案的 PHP 翻译如下:

$input = "d47a3c06-r188-4203-n838-fefd32082fd9";
$str = preg_replace("/[^0-9]/", "", $input);
$str = substr($str, 0, 5);
echo $str, "\n";        ## output: 47306