regex 查找阵列的两个引用之间的最短匹配

kadbb459  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(102)

我使用模式\\n(((?!\.g).)*?\.vcf\.gz)\\r来匹配字符串中所需的子字符串。在下面的示例字符串中,匹配项位于字符串的中间,被两个\r\n所包围。

"\r\n1115492_23181_0_0.g.vcf.gz.tbi\r\n1115492_23181_0_0.vcf.gz\r\n1115492_23181_0_0.vcf.gz.tbi\r\n..."

使用上面的模式可以生成所需的字符串1115492_23181_0_0.vcf.gz0
我的问题是什么是正确的正则表达式只得到所需的字符串。

  • 谢谢-谢谢
9gm1akwq

9gm1akwq1#

您有相等的匹配行,因此匹配扩展名.vcf.gz之前任何位置不包含.g的所有行:

import re
text = "\r\n1115492_23181_0_0.g.vcf.gz.tbi\r\n1115492_23181_0_0.vcf.gz\r\n1115492_23181_0_0.vcf.gz.tbi\r\n..."
m = re.search(r"^((?:(?!\.g).)*\.vcf\.gz)\r?$", text, re.M)
if m:
    print(m.group(1)) # => 1115492_23181_0_0.vcf.gz

请参阅Python demo

  • 详细数据 *:
  • ^-行首
  • ((?:(?!\.g).)*\.vcf\.gz)-组1:
  • (?:(?!\.g).)*-除换行符以外的任何字符,出现一次或多次,但要尽可能多,并且不启动.g字符序列
  • \.vcf\.gz-.vcf.gz字串
  • \r?-可选CR(回车)
  • $-行尾。

相关问题