正则表达式替换组(java、python、perl、awk)

发布于 2024-10-21 05:23:55 字数 362 浏览 1 评论 0原文

我正在寻找一种基于正则表达式和分组进行替换的方法,但这只会替换该组。例如,如果我有:

string = "xxxab yyyyab zzzab xxab"

我想调用类似:

replace_all_group(string, /xx(ab)/,"AB")

并获得:

string = "xxxAB yyyyab zzzab xxAB"

java、perl、python 和 awk 中的任何“短”解决方案都是非常受欢迎的!到目前为止,我已经能够使用index_of等来实现这一点,但我希望那里有某种单行:)

I'm looking for a way to do a replace based on a regex with grouping but that only would replace the group. For instance, if I have:

string = "xxxab yyyyab zzzab xxab"

I want to call something like:

replace_all_group(string, /xx(ab)/,"AB")

and obtain:

string = "xxxAB yyyyab zzzab xxAB"

any "short" solution in java, perl, python and awk is very welcome! so far I was able to achieve that using index_of and the like, but I'm hoping there's some kind of one-liner somewhere out there :)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

她说她爱他 2024-10-28 05:23:55

您想要的是积极的lookbehind断言

仅当 ab 前面有 xx 时才匹配并替换它。

您可以使用以下正则表达式来匹配这样的 ab

(?<=xx)ab

Perl 中的工作示例

Java 中的工作示例

What you want is a positive lookbehind assertion.

Match and replace ab only if it is preceded by xx.

You can use the following regex to match such an ab:

(?<=xx)ab

Working example in Perl

Working example in Java

梅窗月明清似水 2024-10-28 05:23:55

如果字符串不会变得更复杂:

>>> re.sub("xxab", "xxAB", "xxxab yyyyab zzzab xxab")
'xxxAB yyyyab zzzab xxAB'

或者 @codaddict 答案的 python 版本:

>>> re.sub("(?<=xx)ab", "AB", "xxxab yyyyab zzzab xxab")
'xxxAB yyyyab zzzab xxAB'

If the string won't get more complicated:

>>> re.sub("xxab", "xxAB", "xxxab yyyyab zzzab xxab")
'xxxAB yyyyab zzzab xxAB'

Or a python version of @codaddict's answer:

>>> re.sub("(?<=xx)ab", "AB", "xxxab yyyyab zzzab xxab")
'xxxAB yyyyab zzzab xxAB'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文