在Java或Python中复制K特性


Duplicate K feature in Java or Python?

有人知道在Java或Python中复制'K功能的技巧吗?

假设你有这样的字符串:数字和字母的混合,然后在最后一个数字之后是一些字母。我们只想匹配这里的最后一个字母"five"。这是解释我希望做的功能的唯一示例。

01a01d1101five

在PHP, Perl, Ruby中你有'K你可以直接写

^['w]*'d'K[a-z]+$

只有"5"匹配,这很好。

在c#中,你可以在

后面设置可变宽度
(?<=^['w]*'d)[a-z]+$

只有"5"匹配,这很好。

在Java中,这就是我所尝试的。

如果我知道后面字符串的最小和最大宽度,我就可以写

(?<=^['w]{3,9}'d)[a-z]+$

,只有"five"匹配。

实际上我不知道宽度所以我对Java或Python的唯一想法是

^['w]*'d([a-z]+$)

匹配整个字符串并捕获组#1中的"five"。所以我不知道如何在整个比赛/第0组中匹配"5"。你有吗?

随机想法-在Java中,您可以使用'G锚并搜索全局匹配,如下所示:

^['w]*'d(?=[a-z]+$)|(?!^)'G[a-z]+$

第一个匹配将吃掉强制字符,第二个匹配将是您想要的前面有正确模式的匹配。

这意味着第一个匹配只在这里被丢弃(Python不支持'G锚:/),但我不知道一个更通用的方法来做到这一点…我很乐意看到一个。

您可以使用反向查看来获取最后一个字母。

(?<=[0-9])[A-Za-z]+$

由于要查找的是位于最后一个数字和字符串末尾之间的字母,因此不需要知道最后一个字母之前的数字字符串的长度。

如果你不需要在字符串中出现数字,你可以直接使用

 [A-Za-z]+$

当然,在上述两种情况下,您都可以使用^$ match at换行选项