有人知道在 Java 或 Python 中复制\K 功能的技巧吗?
假设您有这样的字符串:数字和字母的混合,然后在最后一个数字之后是一些字母。我们只想匹配这里的最后一个字母“五”。这只是解释我希望实现的功能的示例。
01a01d1101five
在 PHP Perl Ruby 中你有\K 你可以这样做
^[\w]*\d\K[a-z]+$
只有“五”匹配,这很好。
在 C# 中,您可以使用可变宽度的lookbehind
(?<=^[\w]*\d)[a-z]+$
只有“五”匹配,这很好。
在 Java 中,这就是我尝试过的。
如果我知道后面字符串的最小和最大宽度我可以做到
(?<=^[\w]{3,9}\d)[a-z]+$
并且仅匹配“五”。
实际上我不知道宽度,所以我对 Java 或 Python 的唯一想法是
^[\w]*\d([a-z]+$)
这匹配整个字符串并捕获 Group#1 中的“五”。所以我不知道在整场比赛/Group#0 中匹配“五”的技巧。你有吗?
最佳答案
随机想法 - 在 Java 中,您可以使用 \G
anchor 并搜索全局匹配,如下所示:
^[\w]*\d(?=[a-z]+$)|(?!^)\G[a-z]+$
第一个匹配项将耗尽强制字符,第二个匹配项将是您想要的匹配项,前面有正确的模式。
这意味着第一个匹配项只是在这里被丢弃(Python 不支持 \G
anchor :/),但我不知道更通用的方法所以...我很高兴看到一个。
关于c# - Java 或 Python 中的 Duplicate\K 功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23470919/