Python 使用reqular表达式返回一对整数之间的任何内容

Python 使用reqular表达式返回一对整数之间的任何内容,python,Python,到目前为止,这是我的解决方案 import re def has_three_question_marks(word): regex_pattern = re.compile(r"\d(\D+)\d") matches = regex_pattern.findall(word) for match in matches: print(match) print(has_three_question_marks("arrb6???4xxbl5???eee

到目前为止,这是我的解决方案

import re


def has_three_question_marks(word):
    regex_pattern = re.compile(r"\d(\D+)\d")
    matches = regex_pattern.findall(word)
    for match in matches:
        print(match)

print(has_three_question_marks("arrb6???4xxbl5???eee5"))

此解决方案的问题在于,它返回6和4、5和5之间的匹配,但不返回4和5之间的匹配。

当前正则表达式不匹配中间部分的原因是匹配重叠:第一个匹配的尾随数字是第二个匹配的前导数字

最后尝试积极前瞻:

regex_pattern = re.compile(r"\d(\D+)(?=\d)")

这样,匹配将不包括尾随数字,并且匹配不会重叠。

当前正则表达式不匹配中间部分的原因是匹配重叠:第一个匹配的尾随数字是第二个匹配的前导数字

最后尝试积极前瞻:

regex_pattern = re.compile(r"\d(\D+)(?=\d)")

这样,匹配将不包括尾随数字,并且匹配不会重叠。

将第二个\d替换为?=\dre.findall'\d[^0-9]+?=\d',arrb6???4xbl5???ee5将第二个\d替换为?=\dre.findall'\d[^0-9]+?=\d',arrb6???4xBl5???EE5我认为通过解释这一点的必要性,这个答案会有所改进。谢谢你,这有助于做什么?=\d准确地做什么?=\d是一个积极的前瞻性:如果在该点之后有一个数字\d,它会匹配,但不会将该数字包含在匹配中。我认为,通过解释这一点的原因,这个答案会有所改进必要。谢谢这有助于?=\d到底做了什么?=\d是一个积极的前瞻:如果在该点之后有一个数字\d,它将匹配,但不将该数字包括在匹配中。