python - 不匹配正则表达式中的一组字符

标签 python regex string

我有以下表达式

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 部分?

谢谢

最佳答案

你可以在这里使用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 or of 开头的任何字符(惰性)

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

  • .*:匹配0或任意字符(贪心)

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

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

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

关于python - 不匹配正则表达式中的一组字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52100291/

相关文章:

c++ - 将整数放入字符串

string - 如何将 char 转换为 String?

python - 从列表中删除唯一值并仅保留重复项

python - 由于索引,两个 Pandas 系列相乘会产生 NaN 条目

python - 通过忽略空值来比较列( Pandas )

python - 未知错误 : session deleted because of page crash from unknown error: cannot determine loading status from tab crashed with ChromeDriver Selenium

java - 使用正则表达式将嵌套字符与其含义相匹配

regex - 继续 bash 脚本

Java正则表达式检查 "=number",例如 "=5455"?

mysql - 在 MySQL 中选择连接子字符串并替换