django 如何过滤查询集中的某些词

waxmsbnn  于 2023-02-06  发布在  Go
关注(0)|答案(1)|浏览(136)

我有一个变量,它包含股票符号。我需要拆分每个符号,以独立计算它。

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

**解决方案:**我在方括号中添加了=和-,所以我的函数现在是

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

            all = list(map(convertor, Symbols_Splitted))
zdwk9cvp

zdwk9cvp1#

我不认为替换是最佳途径,我会尝试定义你感兴趣的模式--股票代码。
我并不十分清楚股票代号的所有有效字符是甚么,以及这些符号适用甚么规则,但从我所读到的资料来看,以下的规则似乎是成立的:

  • 长度至少为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']

当然,如果有其他要求,该模式可以扩展。

相关问题