gpt4 book ai didi

python - 引用表达式前面部分的匹配项的正则表达式

转载 作者:太空宇宙 更新时间:2023-11-03 11:33:38 24 4
gpt4 key购买 nike

我正在寻找一个正则表达式来识别一个序列,其中文本中的整数指定表达式末尾尾随字母的数量。本具体示例适用于识别 pileup 格式的遗传数据中的插入和删除。

例如:

如果我要搜索的文本是:

AtT+3ACGTTT-1AaTTa

我需要匹配插入和删除,在本例中是+3ACG-1A。整数 (n) 部分可以是任何大于 1 的整数,我必须捕获 n 个尾随字符。

我可以用 [+-]?[0-9]+[ACGTNacgtn] 匹配单个插入或删除,但我不知道如何获取尾随 ACGTN 的确切数量由整数指定。

如果这里有明显的答案,我深表歉意,我已经搜索了几个小时。谢谢!

(更新)

我通常使用 Python 工作。我已经能够通过 python 中的 re 模块找到的一种解决方法是调用每个 in/del 的整数和跨度,并将两者结合起来以提取适当长度的文本。

例如:

>>> import re
>>> a = 'ATTAA$At^&atAA-1A+1G+4ATCG'
>>> expr = '[+-]?([0-9]+)[ACGTNacgtn]'
>>> ints = re.findall(expr, a) #returns a list of the integers
>>> spans = [i.span() for i in re.finditer(expr,a)]
>>> newspans = [(spans[i][0],spans[i][1]+(int(indel[i])-1)) for i in range(len(spans))]
>>> newspans
>>> [(14, 17), (17, 20), (20, 26)]

生成的元组允许我切出插入缺失。可能不是最好的语法,但它确实有效!

最佳答案

您可以使用正则表达式替换传递一个函数作为替换...例如

s = "abcde+3fghijkl-1mnopqr+12abcdefghijklmnoprstuvwxyz"

import re

def dump(match):
start, end = match.span()
print s[start:end + int(s[start+1:end])]

re.sub(r'[-+]\d+', dump, s)

#output
# +3fgh
# -1m
# +12abcdefghijkl

关于python - 引用表达式前面部分的匹配项的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11698332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com