Как отфильтровать некоторые слова в наборе запросов
У меня есть переменная, которая содержит символы акций. Мне нужно разделить каждый символ, чтобы вычислить его независимо.
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']
При наличии дополнительных требований шаблон, конечно, может быть расширен.