【发布时间】:2014-06-21 15:54:55
【问题描述】:
有人知道在 Java 或 Python 中复制 \K 功能的技巧吗?
假设你有这样的字符串:数字和字母的混合,然后在最后一个数字之后,一些字母。我们只想匹配这里的最后一个字母“五”。这只是解释我希望做的功能的示例。
01a01d1101five
在 PHP Perl Ruby 中,你可以使用 \K 来做
^[\w]*\d\K[a-z]+$
只有“五”匹配,这很好。
在 C# 中,您可以有可变宽度的后视
(?<=^[\w]*\d)[a-z]+$
只有“五”匹配,这很好。
在 Java 中这是我尝试过的。
如果我知道后面的字符串的最小和最大宽度,我可以做到
(?<=^[\w]{3,9}\d)[a-z]+$
只有“五”匹配。
实际上我不知道宽度,所以我对 Java 或 Python 的唯一想法是
^[\w]*\d([a-z]+$)
这匹配整个字符串并捕获 Group#1 中的“五”。所以我不知道在整个比赛/Group#0 中匹配“五”的提示。你有吗?
【问题讨论】:
-
除了使用捕获组之外别无他法,但是您可以使用新的 python 正则表达式模块,该模块允许可变长度的后视:pypi.python.org/pypi/regex。一种可能的方法是使用拆分方法和您想要避免的分隔符或替换方法。
-
Java 允许在大小有限的情况下进行可变长度后向查看:
(?<=^\w{0,1000}\d)[a-z]+$ -
关于 Ruby,请注意
\K功能仅在版本 2 中出现 -
@CasimiretHippolyte 谢谢。是的,变量lookbehind的有限版本是我想要的Java示例bu由于某种原因我写错了,现在修复它。您的 cmets 很有帮助。