代码之家  ›  专栏  ›  技术社区  ›  user32882

与正则表达式中的字符数不匹配

  •  3
  • user32882  · 技术社区  · 6 年前

    diff_pr_EUR-44_cordex_rcp45_mon_ave_2048-2060_minus_2005-2017_mon10_ave1_withsd.nc
    

    我想用 regex

    rcp45_mon10
    

    到目前为止,我已经在网上试过了 regex tester

    rcp\d\d[^.]+mon\d+
    

    比我需要的更多。。。

    rcp45_mon_ave_2048-2060_minus_2005-2017_mon10
    

    mon10 部分?

    2 回复  |  直到 5 年前
        1
  •  2
  •   Community CDub    5 年前

    你可以用 re.sub 在这里:

    >>> s = 'diff_pr_EUR-44_cordex_rcp45_mon_ave_2048-2060_minus_2005-2017_mon10_ave1_withsd.nc'
    >>> print (re.sub(r'^.*?(rcp\d+).*(_mon\d+).*', r'\1\2', s))
    rcp45_mon10
    

    RegEx Demo

    细节:

    • ^.*? :匹配0或开头的任何字符(惰性)

    • (rcp\d+) :匹配和捕获 rcp

    • .*

    • (_mon\d+) :匹配和捕获 _mon 后跟第2组中的1+个数字

    • .* :匹配任何内容直到结束

    • r'\1\2' :用组#1和组#2的反向引用替换字符串

        2
  •  2
  •   user3483203    6 年前

    可以使用两个匹配组进行匹配,并且 join :

    >>> ''.join(re.findall(r'(rcp\d{2}).*?(\_mon\d{2})', s)[0])
    'rcp45_mon10'