谢谢。
我使用模式\n(((?!.g).)*?.vcf.gz)\r
来匹配字符串中所需的子字符串。在下面的示例字符串中,匹配位于字符串的中间,被两个rn
包围。
"rn1115492_23181_0_0.g.vcf.gz.tbirn1115492_23181_0_0.vcf.gzrn1115492_23181_0_0.vcf.gz.tbirn..."
使用上面的模式产生所需的字符串1115492_23181_0_0.vcf.gz
以及0
。
我的问题是什么将是正确的正则表达式,只得到所需的字符串。
谢谢。
您有匹配相等的行,因此在.vcf.gz
扩展名之前的任何地方匹配不包含.g
的整行:
import re
text = "rn1115492_23181_0_0.g.vcf.gz.tbirn1115492_23181_0_0.vcf.gzrn1115492_23181_0_0.vcf.gz.tbirn..."
m = re.search(r"^((?:(?!.g).)*.vcf.gz)r?$", text, re.M)
if m:
print(m.group(1)) # => 1115492_23181_0_0.vcf.gz
查看Python演示。
细节:
^
-行起始((?:(?!.g).)*.vcf.gz)
-第1组:(?:(?!.g).)*
-除换行符以外的任何字符,一个或多个但尽可能多地出现,不开始.g
字符序列.vcf.gz
- a.vcf.gz
字符串
r?
-可选CR(回车)$
-行尾