簡體   English   中英

如何在Python中匹配字符串或字符的開頭

[英]How to match beginning of string or character in Python

我有一個由參數號_參數號組成的字符串:

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']

沒有regex解決方案:

def func(par,strs):
    ind=strs.index('_'+par)+1+len(par)
    ind1=strs.find('_',ind) if strs.find('_',ind)!=-1 else len(strs)
    return strs[ind:ind1]

輸出:

>>> func('be',dir)
'0.209'
>>> func('e',dir)
'0.999'
>>> func('cc',dir)
'1.3000'

沒有正則表達式的解決方案:

>>> def get_value(dir, parm):
...     return map(float, [t[len(parm):] for t in dir.split('_') if t.startswith(parm)])
... 
>>> get_value('a1.8000_b1.0000_cc1.3000_al0.209_be0.209_c1.344_e0.999', "be")
[0.20899999999999999]

如果字符串中出現多次參數,則會評估所有參數。

並且沒有強制轉換為浮點數的版本:

return [t[len(parm):] for t in dir.split('_') if t.startswith(parm)]
(?P<param>[a-zA-Z]*)(?P<version>[^_]*)

暫無
暫無

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

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