Как мне удалить ненужные символы и строки? - PullRequest
0 голосов
/ 12 июня 2019

Я хочу убрать все нежелательные символы [AZ] (среди прочих), кроме определенных слов.Например, у нас есть следующая строка:

get 5 and 9

Я хотел бы избавиться от всех слов, которые не являются 'и' или 'или', поэтому конечный результат равен 5 and 9.Я также хочу удалить все символы, не являющиеся частью '[0-9]. + - * () <> \ s'.

Текущее регулярное выражение работает для удаления всех символов, но я нене хочу, чтобы это раздели 'и'.В этом примере результат будет «5 9».

string = 'get 5 and 9'
pattern = re.compile(r'[^0-9\.\+\-\/\*\(\)<>\s)]')
string = re.sub(pattern, '', string)

Я не эксперт по регулярным выражениям и изо всех сил пытаюсь найти решение для этого.Я в некотором роде потерян.

Возможно ли это или я должен искать другие решения?

Ответы [ 2 ]

2 голосов
/ 12 июня 2019

Исправленная версия

import re

test = "get 6 AND 9 or 3 for 6"
keywords = ['and', 'or']
print(' '.join(t for t in test.split() if t.lower() in keywords or t.isdigit()))

$ python test.py
6 AND 9 or 3 6

Отклоняет слова, содержащие и и или,

Предыдущая версия.Я думаю, что это довольно простое решение, но, к сожалению, оно не сработало, так как в нем используются слова «и» и «или» в более длинных словах.

import re

test = "get 6 AND 9 or 3"
pattern=re.compile("(?i)(and|or|\d|\s)")
result = re.findall(pattern, test)
print(''.join(result).strip())

$ python test.py
6 AND 9 or 3

Слова не чувствительны к регистру из-за (? I).Пробелы сохраняются с \ s, но удаляются из начала и конца в операторе печати.Цифры сохраняются через \ d.Круглые скобки и | или | \ d | \ s - это биты строки, найденной через findall, которая генерирует список найденного, затем они объединяются в функции печати. ​​

1 голос
/ 12 июня 2019

Подход без использования регулярного выражения

input = 'get 5 and 9'

accept_list = ['and', 'or']

output = []
for x in input.split():
    try :
        output.append(str(int(x)))
    except :
        if x in accept_list:
            output.append(x)

print (' '.join(output))

Вывод

5 и 9

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...