разбор чисел из предложения - PullRequest
0 голосов
/ 14 мая 2019

У меня есть предложение, которое выглядит так:

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 голосов
/ 14 мая 2019

Я не уверен, как это сделать в регулярном выражении, но вот как я это сделал (возможно, более просто, чем регулярное выражение):

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)

Надеюсь, это поможет, даже если это не такименно то, что вы хотели.Если вам нужно объяснение, просто оставьте комментарий, и я с удовольствием объясню.

0 голосов
/ 14 мая 2019

Для вашего примера работает следующее регулярное выражение:

r = r'(?:\s+-\s+(?![a-zA-Z]))|[\$\d\.,]+'
re.findall(r, s)
#['$1.2', ' - ', '$2,222', '$5']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...