Python 原子俘获群的逆
在序列中,我想获得多个字符的位置,然后是字符和字符之间的位置 例如,在Python 原子俘获群的逆,python,regex,Python,Regex,在序列中,我想获得多个字符的位置,然后是字符和字符之间的位置 例如,在abzyzazayabcyza中,我首先使用原子捕获条件匹配Y和Z的所有倍数 import regex as re seq = 'ABZYZABZAYAYABCYZA' iter = re.finditer(r'Y|Z', seq) dd = {} for matchedobj in iter: dd[matchedobj.group()] = dd.get(matchedobj.group(),[]) +
abzyzazayabcyza
中,我首先使用原子捕获条件匹配Y
和Z
的所有倍数
import regex as re
seq = 'ABZYZABZAYAYABCYZA'
iter = re.finditer(r'Y|Z', seq)
dd = {}
for matchedobj in iter:
dd[matchedobj.group()] = dd.get(matchedobj.group(),[]) + [matchedobj.start()]
给
{'Y': [3, 9, 11, 15], 'Z': [2, 4, 7, 16]}
然后我想匹配连续的Y
或Z
之间的所有空格。在这种情况下,输出匹配应为
{'AB': [0, 5], 'A': [8, 10], 'ABC':[12]}
尝试使用非捕获条件:
iter = re.findter(r'\w*?(?:(Y|Z))', seq)
环顾四周:
iter = re.finditer(r'[^YZ]\w+?(?=Y|Z)|(?<=Y|Z)\w+?(?=Y|Z)|(?<=Y|Z)\w+', seq)
iter=re.finditer(r'[^YZ]\w+?(?=Y | Z)|)(您的模式是X | Y
匹配单个字符,X
或Y
。要反转它,您可以使用[^XY]
,要匹配这样的任何1+字符,您只需要附加+
量词
现在,您正在将匹配项保存到字典中,但您希望键具有相同的名称。这意味着,将只保存每个相同键的最后一个值。您需要的是元组列表,而不是字典
使用
输出;[('AB',0),('AB',5),('A',8),('A',10),('ABC',12),('A',17)]
您的模式是X | Y
匹配单个字符,X
或Y
。若要反转它,您可以使用[^XY]
,若要匹配任何1+字符,只需添加+/code>量词即可
现在,您正在将匹配项保存到字典中,但您希望键具有相同的名称。这意味着,将只保存每个相同键的最后一个值。您需要的是元组列表,而不是字典
使用
输出;[('AB',0),('AB',5),('A',8),('A',10),('ABC',12),('A',17)]
使用重新拆分(r'[YZ]+,文本)
谢谢你的建议。虽然re.split
效果很好,但它并没有告诉我我要找的职位的信息。然后请更新问题以添加预期的行为细节。现在,你说我的匹配应该是AB
AB
A
ABC
和A
-未提及索引。请注意,您正在将匹配项保存到字典中,但您希望具有相同名称的键-这意味着,将只保存最后一个键。您需要的是列表(可能是元组),而不是字典。请在re.finditer(r'[^YZ]+',seq)中为matchedobj尝试:dd.append((matchedobj.group(),matchedobj.start())
使用re.split(r'[YZ]+',文本)
谢谢你的建议。虽然re.split
效果很好,但它并没有告诉我我要找的职位的信息。然后请更新问题以添加预期的行为细节。现在,你说我的匹配应该是AB
AB
A
ABC
和A
-未提及索引。请注意,您正在将匹配项保存到字典中,但您希望具有相同名称的键-这意味着,将只保存最后一个键。您需要的是列表(可能是元组),而不是字典。请在re.finditer(r'[^YZ]+',seq)中尝试以获取matchedobj:dd.append((matchedobj.group(),matchedobj.start())
for matchedobj in re.finditer(r'[^YZ]+', seq):
dd.append((matchedobj.group(), matchedobj.start()))