无法从字符串中删除包含混合字母和数字的单词

时间:2016-11-17 21:04:07

标签: regex python-3.x

我已成功获取我的代码以移除浮动并从命令行反转输入的顺序但我似乎无法获得最终的正则表达式以成功删除包含非数字或混合的所有单词数字和非数字。任何帮助将不胜感激。

#! /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

1 个答案:

答案 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