gpt4 book ai didi

python - 最大化正则表达式中的子串匹配

转载 作者:太空宇宙 更新时间:2023-11-03 13:41:36 27 4
gpt4 key购买 nike

我想从单词中提取元素符号(如果存在)。为此,我准备了一个由元素周期表中所有元素符号组成的正则表达式匹配模式。

H|He|Li|Be|B|C|N|O|F|Ne|Na|Mg|Al|Si|P|S|Cl|Ar|K|Ca|Sc|Ti|V|Cr|Mn|Fe|Co|Ni|Cu|Zn|Ga|Ge|As|Se|Br|Kr|Rb|Sr|Y|Zr|Nb|Mo|Tc|Ru|Rh|Pd|Ag|Cd|In|Sn|Sb|Te|I|Xe|Cs|Ba|La|Ce|Pr|Nd|Pm|Sm|Eu|Gd|Tb|Dy|Ho|Er|Tm|Yb|Lu|Hf|Ta|W|Re|Os|Ir|Pt|Au|Hg|Tl|Pb|Bi|Po|At|Rn|Fr|Ra|Ac|Th|Pa|U|Np|Pu|Am|Cm|Bk|Cf|Es|Fm|Md|No|Lr|Rf|Db|Sg|Bh|Hs|Mt

现在,对于给定的单词,我想使用上面的正则表达式模式从中提取元素。我现在面临的问题是,对于像

这样的词
CuIn2Se

我可以提取

C,In,S

作为元素。这是我需要的不正确提取

Cu, In, Se

从正则表达式中得到“C,In,S”,我相信这是因为匹配模式在“Cu”之前看到“C”,在“Se”之前看到“S”(例如,当前的匹配模式是这样的)

C | In | S | Cu | Se

为了解决这个问题,我想,我必须通过搜索模式中的所有单词来确保正则表达式匹配我单词中的最大字符数。

最佳答案

正确的做法是将所有元素按长度降序排列

>>> import re
>>> pat = re.compile('Cu|In|Se|C|S')
>>> s = 'CuIn2Se'
>>> pat.findall(s)
['Cu', 'In', 'Se']

这在 docs 中有清楚的解释。

小记

鉴于您的输入字符串很长,我编写了一个小脚本,使其按长度降序排列。或许对你有帮助

'|'.join(sorted(s.split('|'),key = len,reverse = True))

关于python - 最大化正则表达式中的子串匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29997723/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com