gpt4 book ai didi

python - 如何在 Python 中匹配字符串或字符的开头

转载 作者:太空狗 更新时间:2023-10-30 01:29:55 26 4
gpt4 key购买 nike

我有一个由参数编号 _ 参数编号组成的字符串:

dir = 'a1.8000_b1.0000_cc1.3000_al0.209_be0.209_c1.344_e0.999'

我需要获取所选参数后面的数字,即

  • par='be' -->需要 0.209
  • par='e' -->需要 0.999

我试过:

num1 = float(re.findall(par + '(\d+\.\d*)', dir)[0])

但对于 par='e' 这将匹配 0.209 0.999,所以我尝试匹配参数连同字符串的开头或下划线:

num1 = float(re.findall('[^_]'+par+'(\d+\.\d*)', dir)[0])

由于某种原因它没有工作。

有什么建议吗?谢谢!

最佳答案

您的[^_] 模式匹配任何不是下划线的字符

改用(..|..)分组:

float(re.findall('(?:^|_)' + par + r'(\d+\.\d*)', dir)[0])

我在那里使用了一个 (?:..) 非捕获组,这样它就不会干扰您的原始组索引。

演示:

>>> import re
>>> dir = 'a1.8000_b1.0000_cc1.3000_al0.209_be0.209_c1.344_e0.999'
>>> par = 'e'
>>> re.findall('(?:^|_)' + par + r'(\d+\.\d*)', dir)
['0.999']
>>> par = 'a'
>>> re.findall('(?:^|_)' + par + r'(\d+\.\d*)', dir)
['1.8000']

详细说明,当使用字符组 ([..]) 并且您开始该组时插入符号 (^) 您反转字符组,将其从匹配列出的字符转变为匹配其他一切:

>>> re.findall('[a]', 'abcd')
['a']
>>> re.findall('[^a]', 'abcd')
['b', 'c', 'd']

关于python - 如何在 Python 中匹配字符串或字符的开头,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12211944/

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