擅长:python、mysql、java
<p>您将无法使用<code>finditer()</code>进行此操作,也无法使用任何常规的匹配导航方式。我管理它的唯一方法(在Java中,而不是Python中)是手动迭代源字符串的每个唯一子字符串(由起始位置和长度决定),以正常方式(而不是使用lookaround)将regex应用于每个子字符串,并在两端锚定。在</p>
<p>Java的Matcher类通过其<code>region()</code>方法提供了一种方便的方法。它允许您假设源的任何子字符串都是完整的,而不必生成新的字符串对象。而且<code>matches()</code>方法会自动在两端锚定匹配项,因此您根本不必修改正则表达式。在</p>
<p>我很确定Python的<code>re</code>模块不支持这样的功能,但是在另一个模块中可能有一些东西可以用来达到类似的效果(我对Python不太流利,所以这只是乐观)。我更不熟悉<code>regex</code>模块,但它似乎支持所有其他风格的最可爱的特性,因此值得一看。在</p>
<p>下面是我的Java解决方案,以防您感兴趣:</p>
<pre><code>public static void printAllMatches(String text, String regex)
{
System.out.printf("%s results:%n", text);
Matcher m = Pattern.compile(regex).matcher(text);
int end = text.length();
for (int i = 0; i < end; ++i)
{
for (int j = i + 1; j <= end; ++j)
{
m.region(i, j);
if (m.matches())
{
for (int k = 0; k < i; k++)
{
System.out.print(" ");
}
System.out.println(m.group());
}
}
}
}
</code></pre>
<p>输出:</p>
^{pr2}$