繁体   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