簡體   English   中英

如何過濾查詢集中的某些單詞

[英]How to filter some words in a queryset

我有一個變量,其中包含股票代碼。 我需要拆分每個符號,以獨立計算它。

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

解決方案:我在括號內添加了 = 和 - 所以我的 function 現在是

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

            all = list(map(convertor, Symbols_Splitted))

我不認為替換是這里到 go 的最佳路徑。 我會嘗試定義您感興趣的模式——股票代碼。

我不完全確定股票代碼中的所有有效字符是什么以及適用於這些符號的規則。 但從我目前所讀的內容來看,似乎以下內容成立:

  • 至少 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)

Output:

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

如果有額外的要求,模式當然可以擴展。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM