有没有办法使用正则表达式进行条件替换功能

Posted

技术标签:

【中文标题】有没有办法使用正则表达式进行条件替换功能【英文标题】:Is there a way to a conditional replace function with Regex 【发布时间】:2021-12-25 14:05:30 【问题描述】:

有没有办法根据给定的输入对一个相同的正则表达式操作使用两个不同的替换函数?

我正在使用以下正则表达式跟踪对话或段落中的括号:

(\([^)]+\))([^(<]+)

如果段落/对话以括号开头……

(微笑)你好,简,(小声)比赛怎么样?

替换功能应该是

<br>$1<br>$2<br>

如果段落/对话只在文本中使用括号……

你好,简,(小声)比赛怎么样?

替换功能应该是

$1<br>$2<br>

有没有办法做到这一点?

非常感谢您的宝贵时间!

【问题讨论】:

你在使用 Notepad++ 吗? 我正在使用 regex101.com 来测试正则表达式,但最终会将其添加到 bubble.io 应用程序 好的,条件替换不起作用,只有 Boost(和 PCRE2)支持条件替换模式。 感谢您提供的信息! 【参考方案1】:

您可以使用 2 个不同的捕获组,一个用于字符串的开头,另一个在不使用交替时使用 |

那么对于替换,您必须检查是否存在捕获组 1 或组 2 以选择正确的替换。

那么您当前的第 2 组将变为第 3 组

(?:(^\([^)]+\))|(\([^)]+\)))([^(<]+)

Regex demo

【讨论】:

非常感谢!不幸的是,我不擅长正则表达式。我尝试了以下替换 (?1$1$2:$1$3),但输出搞砸了。嗯。你能帮我解决这个问题吗? 如果我用$1&lt;br&gt;$2&lt;br&gt;$3 代替 (微笑)你好 Jane,(小声)游戏怎么样? 我得到(smiles)&lt;br&gt;&lt;br&gt; Hello Jane, &lt;br&gt;(quietly)&lt;br&gt; How's the game? 为什么会有两个“”在“(微笑)”之后? @Fabrizio 工具或语言是什么? 嗨第四只鸟,最后,我将使用bubble.io,这就是我想添加正则表达式代码的地方。但我还没有实现正则表达式代码。到目前为止,我刚刚在您提供的 Regex 演示中添加了替换。 我明白了,非常感谢您的时间和专业知识!非常感谢。

以上是关于有没有办法使用正则表达式进行条件替换功能的主要内容,如果未能解决你的问题,请参考以下文章

如何在 PySpark 中编写条件正则表达式替换?

正则表达式 - 增量替换

gawk - 有条件的(即,取决于正则表达式匹配)查找/替换为某些转换器功能

在正则表达式中转义特殊字符

Oracle 正则表达式替换为条件

正则表达式