Как отфильтровать некоторые слова в наборе запросов

У меня есть переменная, которая содержит символы акций. Мне нужно разделить каждый символ, чтобы вычислить его независимо.

print(Symbols_Splitted)

 #returns this 

["'['AAPL", 'TSLA', "MSFT']'"]

Мне нужно что-то для фильтрации релевантных слов, шаблон всегда один и тот же.

Я попробовал это, и это работает, но я обнаружил проблему. Некоторые символы содержат специальные символы, например "EURUSD=X", а этот код удаляет "=", что делает его не действительным.

            def convertor(s):
                perfect = re.sub('[^a-zA-Z]+', '', s)
                return perfect

            all = list(map(convertor, Symbols_Splitted))

Итак, взяв первый пример, мне нужно что-то вроде этого:

Some_function(Symbols_Splitted)

Symbols_Splitted[0]
> AAPL
Symbols_Splitted[1]
> MSFT
Symbols_Splitted[2]
> TSLA

Я не думаю, что подстановка - это оптимальный путь. Я бы попробовал определить интересующий вас паттерн вместо этого - символ тикера.

Я не совсем уверен в том, каковы все допустимые символы в символе тикера и какие правила применяются к этим символам. Но, судя по тому, что я прочитал до сих пор, кажется, что следующее:

  • Длина не менее 2 символов
  • Должен начинаться и заканчиваться латинской буквой или цифрой
  • Может содержать буквы, цифры, точки и знаки равенства

С помощью этих правил мы можем построить следующий простой шаблон:

\w[\w=.]*\w

Код на языке Python может выглядеть следующим образом:

import re


PATTERN_TICKER_SYMBOL = re.compile(r"\w[\w=.]*\w")


def extract_symbol(string: str) -> str:
    m = re.search(PATTERN_TICKER_SYMBOL, string)
    if m is None:
        raise ValueError(f"Cannot find ticker symbol in {string}")
    return m.group()


test_data = [
    "'['AAPL",
    "TSLA",
    "MSFT']'",
    "''''...BRK.A",
    "[][]EURUSD=X-...",
]
cleaned_data = [extract_symbol(s) for s in test_data]
print(cleaned_data)

Выход:

['AAPL', 'TSLA', 'MSFT', 'BRK.A', 'EURUSD=X']

При наличии дополнительных требований шаблон, конечно, может быть расширен.

Вернуться на верх