c# - Java 或 Python 中的 Duplicate\K 功能?

标签 c# java php python regex

有人知道在 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/

相关文章:

java - RSA,如何向后通信

PHP 的 current() 和 key() 函数;与函数签名不一致

php - Bootstrap 模态未显示。只有背景变黑

c# - DataGrid 显示内容值为 'System.Data.DataRowView'

c# - Moon APNS 的未知错误 P12 文件

JavaNoSuchMethod错误: main

java - 单元测试断言与 Mockito.verify()

javascript - 如何使用 PHP 处理 Controller 的 XMLhttp 请求

c# - 缩小 Asp.Net 应用程序的 Html

c# - 执行标量 : "Connection not initialized"