繁体   English   中英

使用Regex,如何从此序列代码中提取数字?

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

我需要输入超过1,000个序列码才能进入数据库,但为了转换识别,它们必须是完全数字的。 它们看起来都与此格式类似,但包含不同的字符/数字:

d47a3c06-r188-4203-n838-fefd32082fd9

我一直试图弄清楚如何使用正则表达式删除所有字母和短划线,但我现在不知所措。

我需要知道如何解决这个问题:d47a3c06-a188-4203-b838-fefd32082fc9

进入:473061884203838320829

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

非常感谢!

根据您的编程语言,您可以轻松地过滤数字并在之后加入它们。
以下是在re模块和列表Python的帮助下Python的一个示例:

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']

在ideone.com上观看演示

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

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

将它们与bash shell和sed命令一起使用。

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

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

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

使用printf

printf d47a3c06-r188-4203-n838-fefd32082fd9 | sed -e "s/[^0-9]//g" -e "s/^\(.\{5\}\).*$/\1/"
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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM