如何从股票代码字符串中移除PLC后的字符?Python实现遇阻
解决股票代码移除PLC后内容的问题
问题背景
有如下格式的股票代码列表:
DISTIL PLC 0.1P ITACONIX PLC 1P LIGHT SCIENCE TECHNOLOGIES HOLDINGS ORD 1P CERILLION PLC 0.5P CROSSWORD CYBERSECURITY PLC 0.5P PAN AFRICAN RESOURCES PLC 1P INLAND HOMES PLC 10P SERICA ENERGY PLC USD0.10 GENEDRIVE PLC 1.5P GATTACA PLC 1P BIDSTACK GROUP PLC 0.5P C4X DISCOVERY HOLDINGS PLC 1P THINKSMART LIMITED ORD NPV (DI) BRAND ARCHITEKTS GROUP PLC 5P MTI WIRELESS EDGE LD ORD ILS0.01 PETROTAL CORPORATION COM SHS NPV (DI) QUANTUM BLOCKCHAIN TECHNOLOGIES PLC 0.25P HURRICANE ENERGY PLC 0.1P DIURNAL GROUP PLC GBP0.05 VICTORIA PLC 5P TRUFIN PLC 91P DEWHURST GROUP PLC 'A'NON.VTG ORD 10P BONHILL GROUP PLC 1P BRAVE BISON GROUP PLC 0.1P RAMBLER METALS & MINING PLC 1P ARROW EXPLORATION CORP. COM SHS NPV (CDI) VALIRX PLC 0.1P VERTU MOTORS PLC 10P MINOAN GROUP PLC 1P VERSARIEN PLC 1P TAVISTOCK INVESTMENTS PLC 1P OVOCA BIO PLC EUR0.125 (CDI) KERAS RESOURCES PLC 1P EQTEC PLC EUR0.001 (CDI) ELIXIRR INTERNATIONAL PLC 0.005P ARMADALE CAPITAL PLC 0.1P ECHO ENERGY PLC 0.25P AGRITERRA LD ORD 10P LONGBOAT ENERGY PLC 10P FEEDBACK PLC 0.25P PIPEHAWK PLC 1P ARC MINERALS LD ORDS NPV (DI) PROVEXIS PLC 0.1P QUIZ PLC 0.3P TINTRA PLC 1P GYG PLC GBP0.002
需求是移除每个代码中**"PLC"之后的所有内容**,但使用硬编码字符组合循环替换的方法无法正常工作,原代码如下:
misc = ( "GBP0.01", "0.01P", "1P", "GBP1", "50P", "0.3P", "0.0", "0.02", "0.002P", "0.4P", "0.001P", "2.5P", "0.2P", "10P", "0.8P","PLC 1P", "0.025P","025P"," 0.00" ,"0.5P", "USD0.01", "2P", "5P","0.0","0.","GBP00001","025P","20P","GBP005") for i in misc: for d in old: q = d.replace(i, "") if q not in old: new.append(q)
原方案失效原因
- 硬编码的字符组合无法覆盖所有可能的后缀(比如示例中的
EUR0.125 (CDI)、'A'NON.VTG ORD 10P等都不在元组内) - 嵌套循环会导致重复添加处理后的字符串,甚至误修改不含PLC的行
可行解决方案
方案1:字符串分割(简单高效)
利用split()方法,以" PLC "为分隔符截取前半部分,保留PLC本身;不含PLC的行直接保留原内容。
代码示例:
# 假设old是存放原始股票代码的列表 old = [ "DISTIL PLC 0.1P", "ITACONIX PLC 1P", # 其余股票代码行... "GYG PLC GBP0.002" ] new = [] for line in old: if " PLC " in line: # 分割后取第一部分,拼接PLC processed_line = line.split(" PLC ")[0] + " PLC" else: processed_line = line new.append(processed_line) # 输出处理后的结果 for item in new: print(item)
方案2:正则表达式(适配复杂格式)
如果PLC前后的空格不固定,或需要处理更复杂的后缀格式,用正则表达式匹配PLC后的所有内容并替换为空。
代码示例:
import re old = [ "DISTIL PLC 0.1P", "ITACONIX PLC 1P", # 其余股票代码行... "GYG PLC GBP0.002" ] new = [] # 正则匹配"PLC "之后的所有字符,替换为"PLC" pattern = re.compile(r' PLC .*') for line in old: processed_line = pattern.sub(' PLC', line) new.append(processed_line) # 输出处理后的结果 for item in new: print(item)
处理后结果示例
DISTIL PLC ITACONIX PLC LIGHT SCIENCE TECHNOLOGIES HOLDINGS ORD 1P CERILLION PLC CROSSWORD CYBERSECURITY PLC PAN AFRICAN RESOURCES PLC INLAND HOMES PLC SERICA ENERGY PLC GENEDRIVE PLC GATTACA PLC BIDSTACK GROUP PLC C4X DISCOVERY HOLDINGS PLC THINKSMART LIMITED ORD NPV (DI) BRAND ARCHITEKTS GROUP PLC MTI WIRELESS EDGE LD ORD ILS0.01 PETROTAL CORPORATION COM SHS NPV (DI) QUANTUM BLOCKCHAIN TECHNOLOGIES PLC HURRICANE ENERGY PLC DIURNAL GROUP PLC VICTORIA PLC TRUFIN PLC DEWHURST GROUP PLC BONHILL GROUP PLC BRAVE BISON GROUP PLC RAMBLER METALS & MINING PLC ARROW EXPLORATION CORP. COM SHS NPV (CDI) VALIRX PLC VERTU MOTORS PLC MINOAN GROUP PLC VERSARIEN PLC TAVISTOCK INVESTMENTS PLC OVOCA BIO PLC KERAS RESOURCES PLC EQTEC PLC ELIXIRR INTERNATIONAL PLC ARMADALE CAPITAL PLC ECHO ENERGY PLC AGRITERRA LD ORD 10P LONGBOAT ENERGY PLC FEEDBACK PLC PIPEHAWK PLC ARC MINERALS LD ORDS NPV (DI) PROVEXIS PLC QUIZ PLC TINTRA PLC GYG PLC
内容的提问来源于stack exchange,提问作者Hazza
相关产品推荐
相关产品推荐

