【发布时间】:2022-01-04 10:56:24
【问题描述】:
我尝试在文件中查找“1/1”或“0/0”出现 3 次或更多次的行。我在 Python 中使用正则表达式。我用https://regex101.com/ 测试我的正则表达式。
这是我的输入文件的一部分:
0 chr1 1152 NaN G A 1355.64 NaN 1/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1
4 chr1 1331 NaN A C 4171.07 NaN 0/0 0/1 0/1 0/1 0/0 0/1 0/1 0/1 0/1 0/0 0/1 0/1
5 chr1 1349 NaN T C 11194.50 NaN 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1
6 chr1 1401 NaN T G 10825.80 NaN 0/1 0/1 0/1 0/1 1/1 0/1 0/1 0/1 0/1 1/1 0/1 0/1
8 chr1 4045 NaN G T 1917.92 NaN 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1
我写了一个正则表达式来查找行首:
r"^\d\s{3}(chr\d)?\s{2}\d+\s+\D+\d+\.\d+\s+\w+"
但我对下一部分有疑问。我试过了:
r"^\d\s{3}(chr\d)?\s{2}\d+\s+\D+\d+\.\d+\s+\w+(\s{2,}1/1|\s{2,}0/0)"
但它只找到第一次出现的“1/1”或“0/0”。当我尝试使用时:
r"^\d\s{3}(chr\d)?\s{2}\d+\s+\D+\d+\.\d+\s+\w+((\s{2,}1/1){3,}|(\s{2,}0/0){3,})"
那么只有一个匹配,其中 '1/1' 出现 3 次或更多,但一个接一个:
8 chr1 4045 NaN G T 1917.92 NaN 1/1 1/1 1/1 1/1 1/1 1/1 0/1 1/1 0/1 1/1 0/1 1/1
关于如何查找 >= 3 '1/1' 或 '0/0' 的所有行的任何想法? 非常感谢!
【问题讨论】:
-
这是您要找的吗?
^(?=(?:.*?(?:0\/0|1\/1)){3,}).*$ -
如果行包含 2
0/0AND 11/1,是否应该匹配? -
@GurmanjotSingh 问题状态为
'1/1' or '0/0' occur 3 or more times