Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 原子俘获群的逆_Python_Regex - Fatal编程技术网

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()))