我需要输入超过1,000个序列码才能进入数据库,但为了转换识别,它们必须是完全数字化的。它们看起来都与此格式类似,但包含不同的字符/数字:
d47a3c06-r188-4203-n838-fefd32082fd9
我一直在试图弄清楚如何使用正则表达式删除所有字母和破折号,但我现在不知所措。
我需要知道如何解决这个问题: d47a3c06-a188-4203-b838-fefd32082fc9
进入: 473061884203838320829
使用正则表达式。然后可能使用前5个数字将其修剪为5位数字。
非常感谢你!
答案 0 :(得分:0)
根据您的编程语言,您可以轻松过滤数字并在之后加入
在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']
答案 1 :(得分:0)
使用带s
(搜索和替换)命令的第一个正则表达式,可以删除所有非数字s/[^0-9]//g
结果与第二个带有s
命令的正则表达式一起使用,只打印第一个正数之前的数字"/^\(.\{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
答案 2 :(得分:0)
由于您正在使用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