簡體   English   中英

我該如何解決這個正則表達式邏輯錯誤?

[英]How can i solve my this regex logical error?

代碼 -

df['Expiry'], df['Symbol'] = None, None
index_Ticker = df.columns.get_loc('Ticker')
index_Expiry = df.columns.get_loc('Expiry')
index_Symbol = df.columns.get_loc('Symbol')
            
Expiry_Pattern = r'-([A-Z]{1,3})'
Symbol_Pattern = r'(.*?)-[A-Z]{1,3}'
            
for row in range(0, len(df)):
    Expiry = re.search(Expiry_Pattern, df.iat[row, index_Ticker]).group()
    df.iat[row, index_Expiry] = Expiry
    Symbol = re.search(Symbol_Pattern, df.iat[row, index_Ticker]).group()
    df.iat[row, index_Symbol] = Symbol

在這里我使用這個正則表達式

Expiry_Pattern = r'-([A-Z]{1,3})'
Symbol_Pattern = r'(.*?)-[A-Z]{1,3}'

我的輸出是 -輸出圖像

我的實際數據采用這種格式 -

ZEEL-III.NFO
RELIANCE-III.NFO
ADANIPORTS-I.NFO
ZEEL-II.
AARTIIND-III.NFO

但我想要輸出 -

ZEEL         III
RELIANCE     III
ADANIPORTS   I
ZEEL         II
AARTIIND     III

我不明白我該如何解決這個問題。

您可以使用正則表達式'-?(\\w+)(?=-|\\.)'來獲得您擁有的示例數據的預期輸出:

>>> df['col'].str.findall('-?(\w+)(?=-|\.)').apply(pd.Series)

            0    1
0        ZEEL  III
1    RELIANCE  III
2  ADANIPORTS    I
3        ZEEL   II
4    AARTIIND  III`

圖案說明

'-?(\\w+)(?=-|\\.)'

  • -? 將匹配一次或零次出現的連字符-在開頭
  • (\\w+)捕獲單詞/子串
  • (?=-|\\.)是正向前瞻,以確保它以-.

非正則表達式解決方案:

首先在 上右拆分字符串. 將 maxsplit n設為 1,然后取第一個索引處的值,並將其拆分為-

df['col'].str.rsplit('.', n=1).str[:-1].str[0].str.split('-').apply(pd.Series)
            0    1
0        ZEEL  III
1    RELIANCE  III
2  ADANIPORTS    I
3        ZEEL   II
4    AARTIIND  III

我提取價值 -

df["Symbol"] = df["Ticker"].str.extract('(.*?)-').apply(pd.Series)
df["Expiry"] = df["Ticker"].str.extract('-([A-Z]{1,3})').apply(pd.Series)

並創建兩列。

現在我的輸出也和我想要的一樣。 輸出圖像

暫無
暫無

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

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