从句子中解析数字

时间:2019-05-14 19:23:49

标签: python regex

我有一句话像这样:

word word - word -word- $1.2 - $2,222 $5 '

我需要获取所有数字,但是在这种情况下,一个和两个之间的破折号实际上被认为是一个数字。所以我想要一个看起来像这样的数组:[ $1.2 | - | $2,222 | $5]

美元符号不是问题

我正在尝试:

(\s+-(?![a-zA-Z]*5)|[\$\d\.,]+\s

这个想法是,我希望它的右边是一个不带字母的破折号,或者是一个复杂的数字(一堆数字,点和逗号),以及周围的空格。

我正在得到这个:

 -  - $1.2  $2,222  $5

...我不需要的所有破折号和我不需要的破折号。

2 个答案:

答案 0 :(得分:0)

以下正则表达式适用于您的示例:

r = r'(?:\s+-\s+(?![a-zA-Z]))|[\$\d\.,]+'
re.findall(r, s)
#['$1.2', ' - ', '$2,222', '$5']

答案 1 :(得分:0)

我不确定如何在正则表达式中执行此操作,但这是我的操作方式(可能比正则表达式更直接):

myList = []
numbers = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "0", "-", "$", ".", ","]
myString = "word word - word -word- $1.2 - $2,222 $5 '"
for word in myString.split(" "):
    isNumber = True
    for letter in word:
        if letter not in numbers:
            isNumber = False
    if isNumber:
        myList.append(word)
print(myList)

我希望这会有所帮助,即使这并不是您想要的。如果您想要解释,请发表评论,我很乐意解释。