#python #regex #bioinformatics
#python #регулярное выражение #биоинформатика
Вопрос:
Мне нужна помощь в создании регулярного выражения для следующих типов строк, я использую Python, но подойдет общее регулярное выражение…
chr1:82137-81236
X 2Mb 6Mb
chr4:87K 1000K
Я запустил его, но не могу заставить его работать для всего, что мне нужно:
(CHR)*s*([0-9]{1,2}|X|Y|MT)s*(-|:)?s*(d )s*(MB|M|K)?s*(-|:)?s*(d )s*(MB|M|K)?
Это будет соответствовать ситуациям, когда я этого не хочу, например:
CHR33 - 12 3
сопоставляется, но не так, как я хочу:
Group 1. CHR
Group 2. 33
Group 3. -
Group 4. 12
Group 5.
Group 6.
Group 7. 3
Group 8.
Я бы хотел, чтобы были возвращены следующие группы:
Group 1: CHR or nothing
Group 2: The chromosome value (1-20,X,Y,MT)
Group 3: The separator between chromosome and first position
Group 4: The numeric portion of the first position
Group 5: The numeric quantifier (M,Mb,K) or nothing if none
Group 6: The separator between position1 and position2
Group 7: The numeric portion of the second position
Group 8: The numeric quantifier (M,Mb,K) or nothing if none
Псевдо-регулярное выражение должно выглядеть следующим образом:
(CHR)(1-20|MT|X|Y)(delimiter s*|-|:)(pos1 numeric)(pos1 quantifier)(delimiter s*|-|:)(pos2 numeric)(pos2 quantifier)
Ответ №1:
Измените регулярное выражение, чтобы также разрешить пустое совпадение (пробелы добавлены для удобства чтения):
(CHR|)*s* # CHR or nothing
([0-9]{1,2}|X|Y|MT)s* # Chromesome value
(-|:)?s* # Separator
(d )s* # Numeric portion of 1st position
(MB|M|K|)?s* # Numeric quantifier or nothing
(-|:|)?s* # Separator b/w position 1 and position 2 or nothing
(d |)s* # Numeric portio of the 2nd position or nothing
(MB|M|K|)? # Numeric quantifier or nothing
Комментарии:
1. Очень аккуратное исправление, 1 🙂 @mattjvincent вы можете использовать этот аккуратный формат в Python, добавив
(?x)
флаг вверху илиre.VERBOSE
в настройках.