Skip to main content
 首页 » 编程设计

python之正则表达式 : may or may not contain a string

2025年05月04日23dflying

我想匹配一个可能是 0.1234567 或 1.23e-5 形式的 float 这是我的 Python 代码:

import re 
def main(): 
    m2 = re.findall(r'\d{1,4}:[-+]?\d+\.\d+(e-\d+)?', '1:0.00003 3:0.123456 8:-0.12345') 
    for svs_elem in m2: 
         print svs_elem 
 
main() 

它打印空白...根据我的测试,问题出在 (e-\d+)?部分。

请您参考如下方法:

见重点:

Help on function findall in module re: 
findall(pattern, string, flags=0) 
    Return a list of all non-overlapping matches in the string. 
    If one or more groups are present in the pattern, return a 
    list of groups; this will be a list of tuples if the pattern 
    has more than one group. 
    Empty matches are included in the result.

You have a group, so it’s returned instead of the entire match, but it doesn’t match in any of your cases. Make it non-capturing with (?:e-\d+):

m2 = re.findall(r'\d{1,4}:[-+]?\d+\.\d+(?:e-\d+)?', '1:0.00003 3:0.123456 8:-0.12345')