RegEx用于捕获两个子字符串之间的字符串

时间:2019-05-15 21:49:10

标签: python regex regex-lookarounds regex-group regex-greedy

我正在尝试提取文本文件中所有出现的图案(这是DNA样品中的氨基酸序列)。

我要匹配的模式是MetSOMETEXT ***

源字符串中多次出现该模式,我正在尝试全部获取。

我目前正在使用re.findall在python中执行此操作,但是它不起作用。

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

我希望获得包含结果的字符串列表。

1 个答案:

答案 0 :(得分:1)

您可能不需要任何环视来获得所需的输出。您可以简单地使用类似于this expression的表达式来做到这一点:

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

共有三个捕获组,第二个是您想要的输出。

Python测试

# 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电路

您还可以在jex.im中可视化您的表达式:

enter image description here