gpt4 book ai didi

RegEx - 是否可以仅使用 RegEx 引擎进行递归替换?条件搜索替换

转载 作者:行者123 更新时间:2023-12-01 00:12:07 25 4
gpt4 key购买 nike

我正在编辑一些数据,我的最终目标是有条件地将 ,(逗号)字符替换为 .(点)。我现在有一个粗略的解决方案,所以这个问题严格来说是为了在实践中提供更好的方法建议,并确定在增强的编程环境之外使用正则表达式引擎的可能性。

我在大学里尝试过,但 6 个小时对于周六来说已经足够了,我放弃了。 :)

我浏览了大约 40 篇关于正则表达式递归、替换等的 SO 帖子,浏览了关于正则表达式和正则语言的定义和历史的 wiki.org,以及其他一些教程网站。大多数以 Python 和 PHP 为中心。

工作的、粗略的正则表达式(促进循环/手动搜索和替换):

(^.*)(?<=\()(.*?)(,)(.*)(?=\))(.*$)

输入片段:

room_ass=01:macro_id=01: name=Left, pgm_audio=0, usb=0, list=(1*,3,5,7,),
room_ass=01:macro_id=02: name=Right, pgm_audio=1, usb=1, list=(2*,4,6,8,),
room_ass=01:macro_id=03: name=All, pgm_audio=1, list=(1,2*,3,4,5,6,7,8,),

以及所需的输出:

room_ass=01: macro_id=01: name=Left, pgm_audio=0, usb=0, list=(1*.3.5.7.),
room_ass=01: macro_id=02: name=Right, pgm_audio=1, usb=1, list=(2*.4.6.8.),
room_ass=01: macro_id=03: name=All, pgm_audio=1, list=(1.2*.3.4.5.6.7.8.),

就是这样。只需将 , 替换为 .,但仅限于 ( ) 内。

这是我希望看到的一种概念性(无效)方法,其中中间组<3> 将递归循环:

(^.*)(?<=\()([^,]*)([,|\d|\*]\3.*)(?=\))(.*$)
( ^ )

..每次递归迭代都会在数据中移动,一次 1 个字符或 1 个逗号:

room_ass=01:macro_id=01: name=Left, pgm_audio=0, usb=0, list=(1*,3,5,7,),
iter 1-| ^ |
2-| ^ |
3-| ^ |
4-| ^|

一种更简单的方法是告诉它屏蔽/选择 () 之间的所有 ,,但我想出了一个办法。我经常使用文本编辑器来完成像这样的小数据编辑任务,所以我想在深入研究 Python 之前验证 SublimeText 不能做到这一点。

欢迎所有的建议和批评。要温柔。 <--#n00b提前致谢!-B

最佳答案

不需要太多魔法。只需检查一下,是否有结束符 ) ahead , without any (介于两者之间。

,(?=[^)(]*\))

See this demo at regex101

但是它不检查开头的 (。这是一种常见的方法,可能是重复的。

关于RegEx - 是否可以仅使用 RegEx 引擎进行递归替换?条件搜索替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57129135/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com