我已成功获取我的代码以移除浮动并从命令行反转输入的顺序但我似乎无法获得最终的正则表达式以成功删除包含非数字或混合的所有单词数字和非数字。任何帮助将不胜感激。
#! /usr/bin/env python
import os
import sys
import re
in_list = sys.argv
def int_sort(i):
int_sort = "test"
int_sort = in_list[1:]
int_sort = " ".join(list(reversed(int_sort))) # sorts everything in reverse of input
int_sort = re.sub('([0-9]*\.[1-9]+)', " ", int_sort).strip() #strips all floats from list
int_sort = "".join(int_sort)
int_sort = re.sub("\S+\D\S+", " ", int_sort).strip() # strips any word that contains anything but a number
return(int_sort)
print (int_sort(in_list))
命令行的结果:
$ testing abc 13 12ab cbds 1234 1.23 ab12
$
期望的结果:
$ testing abc 13 12ab cbds 1234 1.23 ab12
$1234 13
答案 0 :(得分:1)
在我看来,你使任务过于复杂。您可以使用空格分割字符串并获取整个数字块,然后反转列表。
in_list = "testing abc 13 12ab cbds 1234 1.23 ab12"
in_list2 = " ".join(list(reversed([s for s in in_list.split() if s.isdigit()])))
print(in_list2)
否则,您可以使用(?<!\S)\d+(?!\S)
模式来获取用空格(re.findall
)括起来的数字,然后反转列表:
import re
in_list = "testing abc 13 12ab cbds 1234 1.23 ab12"
int_sort = " ".join(list(reversed(re.findall(r"(?<!\S)\d+(?!\S)", in_list))))
print(int_sort)
请参阅Python demo