RegEx для захвата строки между двумя подстроками - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь извлечь все вхождения шаблона из текстового файла (это аминокислотная последовательность из образца ДНК).

Шаблон, который я пытаюсь найти, - это MetSOMETEXT ***

Есть несколько вхождений шаблона в исходной строке, я пытаюсь получить все.

В настоящее время я делаю это в python, используя re.findall, но он не работает.

orfs = re.findall('(?<=Met).*(?=\*\*\*)' , translatedSequence)

Я надеюсь получить список строк, содержащих результат.

1 Ответ

1 голос
/ 16 мая 2019

Возможно, вы не захотите искать обходные пути, чтобы получить желаемый результат. Вы можете просто сделать это с помощью выражения, похожего на это выражение возможно:

(Met)(.*)(\*\*\*)

Есть три группы захвата, где вторая - ваш желаемый результат.

Python Test

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"(Met)(.*)(\*\*\*)"

test_str = "MetSOMETEXT***"

subst = "\\1\\2"

# You can manually specify the number of replacements by changing the 4th argument
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

выход

MetSOMETEXT

Демонстрация JavaScript

const regex = /(Met)(.*)(\*\*\*)/gm;
const str = `MetSOMETEXT***`;
const subst = `$1$2`;

// The substituted value will be contained in the result variable
const result = str.replace(regex, subst);

console.log('Substitution result: ', result);

RegEx

Если это не было вашим желаемым выражением, вы можете изменить / изменить выражение в regex101.com .

enter image description here

RegEx Circuit

Вы также можете визуализировать свои выражения в jex.im :

enter image description here

...